MVC中V与C之间的通话
无论是MVC还是三层,还是其他的一些框架应用,只不过是在业务处理上划分的更加的清晰明了,降低各个模块之间的耦合度。但是各个模块之间又是如何进行通信的呢?下面主要来谈一下MVC中View层与Controller之间的通信。
ModelBinding机制
在MVC中为我们方便的提供了一种叫做模型绑定机制的东西,总的来说就是在每个VIEW中,只能绑定一个Model实体,有了这种绑定的机制,就可以很方便的实现View与Controller之间的通信。如下所示:
Controller层
<span style="font-family:SimSun;font-size:18px;"> /// <summary> /// 用来实现当加载页面的时候想页面传递参数 /// </summary> /// <param name="user">实体类</param> /// <returns></returns> public ActionResult Delete(User user) { //为实体类赋值 user.className = "5465"; user.ID = "4457547"; user.Name = "214"; //把实体类传递到View中 return View(user); }</span>
View层代码
<span style="font-family:SimSun;font-size:18px;"><!--指定了 model 类型的视图 就叫做强类型视图,好处:vs可以直接推断出model的类型,从而提供只能提示--> @*@model ChanDicanshu.Models.User*@ @using ChanDicanshu.Models @{ ViewBag.Title = "Delete"; } <h2>Delete</h2> @*//因为有绑定机制,所以可以直接输出*@ @Model.className <br /> @*//这里的model就是绑定的实体*@ @Model.ID <br /> @Model.Name</span>
基本上就这么简单,通过模型绑定机制,方便的实现了View和Controller之间通过Model实体来进行相互通信。上述有两种方式。一种是当使用的时候绑定,一种时直接绑定强类型视图。
路由机制传递参数
先看一下MVC中的路由机制
<span style="font-family:SimSun;font-size:18px;"> public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { //忽略给定路由列表指定的URl路由 routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( //路由名称 name: "Default", //Url地址 url: "{controller}/{action}/{id}", //默认的路由地址 defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional} ); } }</span>
在MVC中就是通过这么一个识别地址的方式来查找到底使用那个Controller中的那个方法,最后来显示那个视图。通过这种途径,我们也可以来实现View层与Controller之间传递参数,实现起来也特别的简单,只要名字相同就可以识别。
View层代码
<span style="font-family:SimSun;font-size:18px;"><html> <head> <meta name="viewport" content="width=device-width" /> <title>Index</title> </head> <body> @*连接到相同的Controller下的Show方法中,传递的参数为id*@ @Html.ActionLink("删除", "show", new { id = "123"}) </body> </html></span>
我们在View层只定义了一个链接的操作,最后会连接到相同Controller下的show方法中,但是还有传递的参数。如果你细心的话,看地址的话,会发现/Home/show/123,123就代表我们所要传递的参数。我们如何来获得呢。
Controller层代码
<span style="font-family:SimSun;font-size:18px;"> /// <summary> /// 路由机制来获得传递参数 /// </summary> /// <param name="id">这就是传递过来的参数,只要名字相同就可以识别</param> /// <returns></returns> public ActionResult Show(int id) { return View(); }</span>
Request和FormCollection
在上一篇博客中也曾提到过,通过这两个对象就可以获取表单上的数据,方便了View和Controller之间的交互。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。