MVC扩展ModelBinder,通过继承DefaultModelBinder把表单数据封装成类作为action参数

把视图省、市、街道表单数据,封装成一个类,作为action参数。如下:

1


action方法参数类型:

namespace MvcApplication1.Models
{
    public class Customer
    {
        public string Address { get; set; }
    }
}

 

在自定义ModelBinder中,接收视图表单数据,封装成Customer类。

using System.Web;

using System.Web.Mvc;

using MvcApplication1.Models;



namespace MvcApplication1.Extension

{

    public class CustomerBinder : DefaultModelBinder

    {

        public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)

        {

            if (bindingContext.ModelType == typeof (Customer))

            {

                HttpRequestBase request = controllerContext.HttpContext.Request;

                string province = request.Form.Get("Province");

                string city = request.Form.Get("City");

                string street = request.Form.Get("street");



                return new Customer() {Address = province+city+street};

            }

            else

            {

                return base.BindModel(controllerContext, bindingContext);

            }

            

        }

    }

}

 

全局注册:

ModelBinders.Binders.Add(typeof(Customer), new CustomerBinder());

 

HomeController:

using System.Web.Mvc;

using MvcApplication1.Extension;

using MvcApplication1.Models;



namespace MvcApplication1.Controllers

{

    public class HomeController : Controller

    {

        public ActionResult Index()

        {

            return View();

        }



        [HttpPost]

        public ActionResult Index([ModelBinder(typeof(CustomerBinder))]Customer customer)

        {

            if (ModelState.IsValid)

            {

                return Content(customer.Address);

            }

            return View();

        }

    }

}

 

Home/Index.cshtml:

@{

    ViewBag.Title = "Index";

    Layout = "~/Views/Shared/_Layout.cshtml";

}



<h2>Index</h2>

@using (Html.BeginForm())

{

    <table>

        <tr>

            <td>省</td>

            <td><input type="text" id="Province" name="Province"/></td>

        </tr>

        <tr>

            <td>市</td>

            <td><input type="text" id="City" name="City"/></td>

        </tr>

        <tr>

            <td>街道</td>

            <td><input type="text" id="Street" name="Street"/></td>

        </tr>

        <tr>

            <td colspan="2"><input type="submit" value="提交"/></td>

        </tr>

    </table>

}

 

提交后结果:

2

你可能感兴趣的:(action)