zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    IO多路复用
    事件驱动模型
    协程
    进程
    py2与py3的编码问题
    Linux Centos7 网卡无法启动
    监控的法则
    如何优雅的采集activeMQ性能指标
    一分钟性能分析
    beta版 tomcat 应用监控指标
  • 原文地址:https://www.cnblogs.com/darrenji/p/3756201.html
Copyright © 2011-2022 走看看