MVC开发小结

哎,发现我已经很久没有写文章了,懒惰啊...最近在忙一个基于MVC模式的门户网站。对于一个之前没有接触MVC的我,又得从零开始。所以开发中遇到不少麻烦,现在项目也接近完毕,故作此文铭记。我知道MVC都出到3.0了,但由于我的开发工具是vs08,所以还是只能用MVC 1.0。高手别见笑啊,我知道我out fashion了…

Form 表单提交:

有时Form表单中间肯定不止一个submit,这时我们肯定要对这些submit做一些识别,不然提交到的都是同一个Controller,那就不好啦。其实这里很啰嗦,因为前辈们都总结好了,哎,我写给自己看,都说是备忘么…

1、  客户端脚本。缺点:有点死板,逻辑相似时根本没必要分开两个action。

示例:<%using (Html.BeginForm())

              { %>

       <input type = "submit" name = "btn" onclick = 'this.form.action="<%=Url.Action("about") %>";'/>

        <input type = "submit" onclick ='this.form.action="<%=Url.Action("FileUP") %>";'/>

    <%} %>

2、  在Action中判断通过哪个按钮提交

提交按钮定义相同的name属性,比如name = “action”,并且指定value。这样在controller中就可以判断是否action等于那个value来处理不同代码。

3、使用ActionSelector,

别人的成果
Controller:



以下为引用的内容:



[HttpPost]

[MultiButton(Name = "delete", Argument = "id")]

public ActionResult Delete(string id)

{

var response = System.Web.HttpContext.Current.Response;

response.Write("Delete action was invoked with " + id);

return View();

}







View:



以下为引用的内容:



<input type="submit" value="not important" name="delete" />

<input type="submit" value="not important" name="delete:id" />





MultiButtonAttribute定义:



以下为引用的内容:



[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]

public class MultiButtonAttribute : ActionNameSelectorAttribute

{

public string Name { get; set; }

public string Argument { get; set; }



public override bool IsValidName(ControllerContext controllerContext, string actionName, MethodInfo methodInfo)

{

var key = ButtonKeyFrom(controllerContext);

var keyIsValid = IsValid(key);



if (keyIsValid)

{

UpdateValueProviderIn(controllerContext, ValueFrom(key));

}



return keyIsValid;

}



private string ButtonKeyFrom(ControllerContext controllerContext)

{

var keys = controllerContext.HttpContext.Request.Params.AllKeys;

return keys.FirstOrDefault(KeyStartsWithButtonName);

}



private static bool IsValid(string key)

{

return key != null;

}



private static string ValueFrom(string key)

{

var parts = key.Split(":".ToCharArray());

return parts.Length < 2 ? null : parts[1];

}



private void UpdateValueProviderIn(ControllerContext controllerContext, string value)

{

if (string.IsNullOrEmpty(Argument)) return;

controllerContext.Controller.ValueProvider[Argument] = new ValueProviderResult(value, value, null);

}



private bool KeyStartsWithButtonName(string key)

{

return key.StartsWith(Name, StringComparison.InvariantCultureIgnoreCase);

}

}



 Form上传

 View:

<form enctype="multipart/form-data" method = "post">
<input type = "file" name = "fileUp"/><input type = "submit" onclick ='this.form.action="<%=Url.Action("FileUP") %>";'/>
</form> 

Controller:

public ActionResult FileUp(HttpPostedFileBase fileUp)
{
  fileUp.SaveAs(Server.MapPath("~/Content/"+fileUp.FileName));
  return Content(fileUp.FileName);

为什么要加红色那块呢?

 

表单中enctype="multipart/form-data"的意思,是设置表单的MIME编码。默认情况,这个编码格式是application/x-www-form-urlencoded,不能用于文件上传;只有使用了multipart/form-data,才能完整的传递文件数据,进行下面的操作.

 

enctype="multipart/form-data"是上传二进制数据; form里面的input的值以2进制的方式传过去。

 

form里面的input的值以2进制的方式传过去,所以request就得不到值了。 也就是说加了这段代码,用request就会传递不成功。可以通过直接在url中传参。

 

Html.DropDownList 

这个其实有很多种写法,蛮灵活的。也可以直接用html的select来写;

1、<%=Html.DropDownList("ddl")%>

2、<select name = "sl"><option>请选择...</option>
<%foreach (var item in ViewData["ddl"] as SelectList)
{ %>
<option value = "<%=item.Value%>"><%=item.Text%></option>
<%} %>
</select>

3、<select name="sl">
   <option value="1">a</option>
   <option value="2">b</option>

  </select> 

前面两种方法需要在controller中动态绑定:

List<SelectListItem> list = new List<SelectListItem>{
new SelectListItem{Text = "a",Value = "1"},new SelectListItem{ Text="b",Value = "2"}
};
ViewData["ddl"] = new SelectList(list,"Value","Text");
return View(); 

Html.RadioButton 

需要指定相同的name,不同的value(男、女)。controller中判断name等于哪个value

MVC实现GridView、新闻列表等+分页

 https://files.cnblogs.com/conger/MyGridView.rar

具体大家可以参照这个例子。很有趣的是利用这个不仅可以实现GridView,几乎其他列表要求分页都可以实现。不信你试试!

截个成果给大家:

其实不难,只要根据你想实现的效果修改一下就行。


posted on 2011-12-02 17:03  congplayer  阅读(1841)  评论(2编辑  收藏  举报

导航