前言
工作了这么久了,接触ASP.NET MVC已经很久了,一直都想总结一下它的一些实用的,经常使用的一些技巧,但是因为一直都很懒,也不想总结,所以一直都没有好好写出来,趁着现在有这种冲劲,那么就先把它写好吧.
以下都是我对于我来说,觉得比较便捷的代码,当然,我写的东西未必适合所有人,但是至少里面还是有一些比较简单且实用的技巧的.
例子主要是参照 http://www.cnblogs.com/duanshuiliu/tag/ASP.NET/ 里面介绍了很多MVC一些很重要而且很常用的东西
代码
因为是边看别人的例子,然后再结合我工作中遇到一些问题,或者用上的一些技巧,所以就组合成了以下的这些代码
先创建以下实体类
public partial class Person { [Display(Name = "加了标签的ID")] public int PersonId { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public DateTime BirthDate { get; set; } public Address HomeAddress { get; set; } public bool IsHappy { get; set; } public Role Role { get; set; } public string Color { get; set; } public List<Relative> relatvie { get; set; } } public class Address { public string City { get; set; } public string Country { get; set; } } public class Relative { public string Name { get; set; } public string RelativeAge { get; set; } } public enum Role { Admin = 1, User = 2, Guest = 3 }
Person类是主要的类,里面包含了 string类型 int类型 DateTime类型 引用类型 枚举类型 以及集合类型 的属性,在实际工作中,经常都会遇到这些类型,然后需要前后台结合接收数据
以下是控制其中的代码
public ActionResult StrongModelView(Person person) {
person.PersonId = 123; //对模型进行验证① if (string.IsNullOrWhiteSpace(person.FirstName)) { ModelState.AddModelError("FirstName", "请输入FirstName"); }
//② if (ModelState.IsValid) { //如果验证都通过了,那么就是怎么怎么 } else { //不通过就怎么怎样 } Dictionary<string, int> dic = new Dictionary<string, int>(); foreach (int myCode in Enum.GetValues(typeof(Role)))//③ { string strName = Enum.GetName(typeof(Role), myCode);//获取名称 dic.Add(strName, myCode); } //下拉框 SelectList sel = new SelectList(dic, "Value", "Key");//④ ViewData["sel"] = sel; //RadioButton List<string> colors = new List<string>() { "Red", "Green", "Blue" }; ViewData["colors"] = colors; return View(person); }
以下是Razor视图的代码
@using (Html.BeginForm("StrongModelView", "home", FormMethod.Post))//⑤ { //以列表形式输出错误 @Html.ValidationSummary()//⑥ <div> <table> <tr> <td>@Html.LabelFor(c => c.PersonId)</td>//⑦ <td>@Html.DisplayFor(c => c.PersonId)</td>//⑧ </tr> <tr> <td>FirstName</td> <td>@Html.EditorFor(c => c.FirstName)</td>//⑨ </tr> <tr> <td>LastName</td> <td>@Html.TextBoxFor(c => c.LastName)</td> </tr> <tr> <td>BirthDate</td> <td>@Html.EditorFor(c => c.BirthDate)</td>//⑩ </tr> <tr> <td>IsHappy</td> <td>@Html.EditorFor(c => c.IsHappy)</td>//⑪ </tr> <tr> <td>Color</td> <td>@{ List<string> colorss = ViewData["colors"] as List<string>; foreach (var item in colorss) { @item; @Html.RadioButtonFor(c => c.Color, item);//⑫ } } </td> </tr> <tr> <td>Role</td> <td>@Html.DropDownListFor(c => c.Role, ViewData["sel"] as SelectList)</td>//⑬ </tr> <tr style="background-color: #0094ff;"> <td>城市</td> <td>@Html.Editor("relatvie[0].RelativeAge")@Html.Editor("relatvie[0].Name")</td>//⑭ </tr> <tr> <td> <input type="submit" value="提交" /></td> </tr> </table> </div> }
常用的或重要的记录
①是添加错误进行到模型的状态中的,如果在前台中使用了错误提示进行接收的话,那么才有用,否则我觉得没什么用,例如像我们公司,直接使用TempData["message"]返回所有的提示信息,包括错误信息
②如果模型绑定都通过了.那么就会是true,如果有模型有绑定不上的,那么就是返回false
③遍历枚举的方法,这个方法应该很多时候都会使用到,所以也记录下来
④在前台如果要接收 一个dropdownList的话,那么就需要使用selectList这个类,然后传入一个字典是最使用key/value的表示的,然后字典对应selectList的应该是"Key","Value",都是大写开头的.(你也可以传出其他IEnumble类型的集合)
⑤这是利用Razor视图创建一个表单,个人感觉其实和普通的html创建的表达的速度是一个的,没什么特别,也不见快很多
⑥如果在action方法中,对模型进行验证,并且返回了错误信息,那么,就可以使用ValidationSummary来进行错误的显示,它会生成一个ul进行显示的,个人还是觉得没什么用
⑦HTML.Labal()则只是显示该字段的名称,除非在强类型视图的这个类的属性上添加Display(Name="xxx")的标签,否则都是只显示字段的名称
⑧HTML.Display()显示的是字段对应的value值
⑨EditorFor会根据返回的类型,生成相应的input标签,并且生成的Name和ID与字段的名称是相对应的,例如bool型就生成checkbox,datetme就生成datetime型的
⑫主要为了如何显示radio button的列表出来,主要是根据由相同的name所以构成相同的,会提交选中的,
⑬主要是由后端返回一个selectList 然后在前端接收相应的selectList 这个selectList就是组成列表的选项
⑭有时候,我们在后端需要直接接收一个列表,那么这个时候就是应该使用索引器进行接收
杂七杂八的总结
- 如果是直接根据填入的条件进行查询的,那么就使用get请求,如果是对数据进行加工的,那么使用post请求,get的请求主要是返回页面的, 所以如果查询就是相对合理点.
- 对于路径的操作:1.URL.Action()生成的/home/index这样的路径,但是HTML.ActionLink()就是生成a标签了,因为带了HTML,其实就是html的帮助函数
感言
初次写博客..感觉写到乱七八糟,各种编辑器不会用,各种排版不会用,其实写博客主要是记录一下自己一些遇到的问题,以及使用的技巧,很多东西都是针对我自己个人而已,所以有时候难免会让其他人看不懂,请见谅.