MVC扩展ModelBinder,通过继承DefaultModelBinder把表单数据封装成类作为action参数
2014-05-27 23:38
671 查看
把视图省、市、街道表单数据,封装成一个类,作为action参数。如下:
action方法参数类型:
namespace MvcApplication1.Models
{
public class Customer
{
public string Address { get; set; }
}
}
在自定义ModelBinder中,接收视图表单数据,封装成Customer类。
全局注册:
ModelBinders.Binders.Add(typeof(Customer), new CustomerBinder());
HomeController:
Home/Index.cshtml:
提交后结果:
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> }
提交后结果:
相关文章推荐
- asp.net mvc源码分析-DefaultModelBinder 自定义的普通数据类型的绑定和验证
- Mvc用DefaultModelBinder处理Json序列化数据
- asp.net mvc源码分析-DefaultModelBinder 自定义的普通数据类型的绑定和验证
- MVC扩展控制器工厂,通过继承DefaultControllerFactory来决定使用哪个接口实现,使用Ninject
- asp.net mvc源码分析-DefaultModelBinder 自定义的普通数据类型的绑定和验证
- mvc源码解读(18)-数据绑定组件ModelBinder之DefaultModelBinder
- Asp.net MVC的Model Binder工作流程以及扩展方法(3) - DefaultModelBinder
- mvc源码解读(17)-数据绑定组件ModelBinder之ModelBinders
- Asp.net MVC DefaultModelBinder分析
- ASP.NET MVC 2扩展点之Model Binder实例分析
- MVC扩展Filter,通过继承HandleErrorAttribute,使用log4net或ELMAH组件记录服务端500错误、HttpException、Ajax异常等
- ASP.NET MVC:如何提供 Controller 继承体系使用的 ModelBinder?
- Asp.net MVC的Model Binder工作流程以及扩展方法(1)
- MVC 数据绑定(Model Binder)
- 一起谈.NET技术,ASP.NET MVC 2扩展点之Model Binder
- MVC扩展Filter,通过继承ActionFilterAttribute为登录密码加密
- Asp.net MVC的Model Binder工作流程以及扩展方法(1) - Custom Model Binder
- asp.net mvc源码分析-Action篇 DefaultModelBinder
- PHP calss类与extends继承、通过调用类的方法与表单数据进行交互
- asp.net mvc源码分析-Action篇 DefaultModelBinder