无论是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之间的交互。
原文:http://blog.csdn.net/luckyzhoustar/article/details/41723511