跟蓝狐学MVC教程--Action参数绑定Model Binding详解--了解Model Binding

跟蓝狐学MVC教程--Action参数绑定Model Binding详解--了解Model Binding

2780发表于2015-05-29

mvc中的参数一般都会映射到一个Action方法的参数,这样你就不用像WEB Form一样到处是Request.Params["xx"]、Request.Form["xx"]或者Request.QueryString["xx"]来获取参数。那MVC中它是怎么把这些参数映射到Action方法的参数呢?这里其实用的是MVC框架中的绑定机制。本文我就来分析一下MVC中的Model Binnding。

一、了解Model Binding

下面我们使用VS2013创建一个MVC5项目。

首先我们把HomeController用下面的代码替换:

using System;
using System.Collections.Generic;
using System.linq;
using System.Web;
using System.Web.Mvc;

namespace MVCModelBindingDemo.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index(int id)
        {
            ViewBag.ID = id;
            return View();
        }
    }
}


然后,我们把视图/Views/Home/Index.cshtml用下面的代码替换: 

@{
    ViewBag.Title = "Home Page";
}

<div style="margin:20px;"><strong>ID:</strong>@ViewBag.ID</div>


最后"/Home/Index/123"的显示如下结果:


可能有同学会问为什么HomeController的Action Index的参数的值就为url中的123呢?我们再来看看我们创建MVC项目时VS自动给我们生成的路由配置App_Start\RouteConfig.cs代码如下:

public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
    }


可以看到默认为我们注册了一个路由规则,名称为:”Default“,url规则为”{controller}/{action}/{id}“。这个规则分为三部分,将分别映射到参数:controller,action,id。controller和action是没一个路由必须有的,id是我们自定义的参数,这里具体就是Index方法的id。

这样MVC框架结合我们的路由配置,为我们的Action参数赋值的过程就是Model绑定(Model Binding)。


小编蓝狐