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

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

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>
}

提交后结果:

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

时间: 2024-10-14 17:08:38

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

把表单数据封装成json格式 插件可用

来源:https://github.com/macek/jquery-serialize-object 请看 文件里面的jquery-serialize-object-master.zip 有一个文件:jquery.serialize-object.js , 是用来 把表单 数据  进行JSON 格式. 用法: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&q

MVC扩展Filter,通过继承HandleErrorAttribute,使用log4net或ELMAH组件记录服务端500错误、HttpException、Ajax异常等

□ 接口 public interface IExceptionFilter{    void OnException(ExceptionContext filterContext);} ExceptionContext继承于ControllerContext,从中可以获得路由数据route data.HttpContext. □ 的HandleErrorAttribute是对IExceptionFilter的实现,默认是启用的 public static void RegisterGlobal

MVC扩展ModelBinder使类型为DateTime的Action参数可以接收日期格式的字符串

原文:MVC扩展ModelBinder使类型为DateTime的Action参数可以接收日期格式的字符串 如何让视图通过某种途径,把符合日期格式的字符串放到路由中,再传递给类型为DateTime的控制器方法参数?即string→DateTime.MVC默认的ModelBinder并没有提供这样的机制,所以我们要自定义一个ModelBinder. 首先,在前台视图中,把符合日期格式的字符串赋值给date变量放在路由中: @Html.ActionLink("传入日期格式为2014-06-19&quo

springmvc文件上传及表单数据封装

补充: form表单需要提交时间,springmvc封装到实体类的Date字段时,丢失时分秒,可以在controller中添加     @InitBinder     public void initBinder(WebDataBinder binder) {         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");         dateFormat.setLenient(f

ASP.NET From表单转实体类

//新版本,可以再globa.ascx里面设置开发模式 //以便于调试错误 //表单转实体对象V2版 public class HttpRequestHelper { /// <summary> /// 开发模式,设置成开发模式后抛出异常,可查看出错的属性,和类型 /// </summary> public static bool DevMode { get; set; } #region 表单转换成实体模型 /// <summary> /// 表单转换成实体模型 //

把表单转成json,并且name为key,value为值

http://jsfiddle.net/sxGtM/3/http://stackoverflow.com/questions/1184624/convert-form-data-to-js-object-with-jquery /*把表单转成json,并且name为key,value为值*/ $.fn.serializeObject = function() { var o = {}; var a = this.serializeArray(); $.each(a, function() { i

通用js表单验证工具类插件-is.js

is.js是一个强大的通用js表单验证工具类.你可以使用js.js来检测任何东西,例如检测所给的值是否为参数,是否是数组,是否是超链接,甚至可以检测浏览器类型,正则表达式和数学表达式等. is.js根据检测的类型分为:类型检测.正则表达式检测.算数检测.环境检测.时间检测.Presence检测.对象检测.字符串检测数组检测和配置检测. 在线文档:http://www.htmleaf.com/Demo/201502091353.html 下载地址:http://www.htmleaf.com/jQ

jquery自动将form表单封装成json的具体实现

前端页面:<span style="font-size:14px;"> <form action="" method="post" id="tf"> <table width="100%" cellspacing="0" cellpadding="0" border="0"> <tr> <th&

MVC中接受视图传递数据(表单)的方法

1.通过Request.Form读取表单数据        2.通过FormCollection读取表单数据        3.通过对象读取表单数据 首先定义一个UserModel类: public class UserModel { public int UserID { get; set; } //用户编号 public string UserName { get; set; } //用户名 public string Password { get; set; } //密码 } 视图代码如下