MVC中V与C之间的通话

来源:互联网 发布:unity3d 显示3d模型 编辑:程序博客网 时间:2024/05/17 23:08

 

 无论是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之间的交互。

 

 


0 0
原创粉丝点击