• 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

  • 相关阅读:
    bzoj1295 [SCOI2009]最长距离
    bzoj1853 [Scoi2010]幸运数字
    bzoj1855 [Scoi2010]股票交易
    bzoj1294 [SCOI2009]围豆豆
    bzoj1237 [SCOI2008]配对
    bzoj1084 [SCOI2005]最大子矩阵
    bzoj1068 [SCOI2007]压缩
    bzoj1082 [SCOI2005]栅栏
    soj97 旅行
    soj98 卡牌
  • 原文地址:https://www.cnblogs.com/darrenji/p/3756201.html
Copyright © 2020-2023  润新知