首页 > 代码库 > 《ASP.NET MVC 4 实战》学习笔记 4:控制器(上)
《ASP.NET MVC 4 实战》学习笔记 4:控制器(上)
周末狂欢两天,这周工作任务又好多,几天没有学习。。。
一、控制器和动作:
从前面的内容我们可以看到控制器的动作基本有两个特点:(1)public修饰;(2)返回ActionResult。
但动作并非必须返回ActionResult,可以是void的或其他,如下面两例:
1 public class SimpleController:Controller 2 { 3 public void Index() 4 { 5 Response.Write("<h1>Hello World !</h1>"); 6 } 7 } 8 ////////////////////////////////////////////////////////////// 9 public class SimpleController:Controller10 {11 public string Index()12 {13 return "<h1>Hello World !</h1>";14 } 15 }
需要注意的是ControllerActionInvoker(控制器动作调用器)总是将动作的返回值封装成一个ActionResult。
另外,我们可以用NoActionAttribute对public方法进行修饰,以阻止控制器上的public方法成为动作:
1 public calss SimpleController:Controller2 {3 [NoAction]4 public string SomePublicMethod()5 {6 return "Hello Wordl !";7 }8 }
二、控制器的任务:
控制器有两个通用任务:手工映射视图模型和接受用户输入(执行验证)。
1.手动映射视图模型:
视图模型是为了在屏幕上显示数据而单独创建的模型对象。随着应用程序复杂性的提升,往往要求视图数据与模型结构不同。例如Guestbook应用程序的一个页面中显示每个用户的评论次数:
1)添加一个视图模型:
1 namespace Guestbook.Models2 {3 public class CommentSummary4 {5 public string UserName { get; set; }6 public int NumberOfComments { get; set; }7 }8 }
2)控制器添加动作:
1 public ActionResult CommentSumary() 2 { 3 var entries = from entry in db.Entries 4 group entry by entry.Name 5 into groupByName 6 orderby groupByName.Count() descending 7 select new CommentSummary 8 { 9 NumberOfComments=groupByName.Count(),10 UserName=groupByName.Key11 };12 return View(entries.ToList());13 }
3)添加视图:
1 @model IEnumerable<Guestbook.Models.CommentSummary> 2 3 @{ 4 ViewBag.Title = "CommentSumary"; 5 } 6 7 <h2>CommentSumary</h2> 8 9 <p>10 @Html.ActionLink("Create New", "Create")11 </p>12 <table class="table">13 <tr>14 <th>15 @Html.DisplayNameFor(model => model.UserName)16 </th>17 <th>18 @Html.DisplayNameFor(model => model.NumberOfComments)19 </th>20 <th></th>21 </tr>22 23 @foreach (var item in Model) {24 <tr>25 <td>26 @Html.DisplayFor(modelItem => item.UserName)27 </td>28 <td>29 @Html.DisplayFor(modelItem => item.NumberOfComments)30 </td>31 </tr>32 }33 34 </table>
2.输入验证:
前面GuestbookController的Create动作中接受用户输入没有做任何验证,下面加以改进:
1)添加验证注解属性--修改GuestbookEntry:
1 namespace Guestbook.Models 2 { 3 public class GuestbookEntry 4 { 5 public int Id { get; set; } 6 [Required] 7 public string Name { get; set; } 8 [Required] 9 public string Message { get; set; }10 public DateTime DateAdded { get; set; }11 }12 }
2)检查验证是否成功--修改create动作:
1 [HttpPost] 2 [ValidateAntiForgeryToken] 3 public ActionResult Create([Bind(Include="Id,Name,Message,DateAdded")] GuestbookEntry guestbookentry) 4 { 5 if (ModelState.IsValid)//检查验证是否成功 6 { 7 db.Entries.Add(guestbookentry); 8 db.SaveChanges(); 9 return RedirectToAction("Index");10 }11 12 return View(guestbookentry);//失败时重新渲染表单13 }
3)在视图中显示错误消息:
@Html.ValidationSummary(true)
注:若要在视图中显示自定义消息,只要修改Required注解属性的声明,如:
[Required(ErrorMessage="请输入您的用户名")] public string Name { get; set; }
如果不想对消息进行硬编码,可以指定源文件的名称和类型:
[Required(ErrorMessageResourceType=typeof(类型), ErrorMessageResourceName=名称]
不知道是网络还是博客园出了问题,丢失了部分内容,剩下的重新整理单独再发一篇吧。。。
《ASP.NET MVC 4 实战》学习笔记 4:控制器(上)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。