在asp.net mvc的控制器中如果能够活用模型的自动绑定功能的话能够减少许多工作量。但是如果我们想要对前台传来的数据进行一些处理再绑定到模型上,该怎么做呢?
这里用一个绑定用户数据的小案例来讲解asp.net的自定义模型绑定。
新建用户模型:
public class User { public string name { set; get; } public int age { set; get; } public DateTime day { set; get; } }
新建UserCustomBinder类,继承自DefaultModelBinder类(来自system.web.mvc)
public class UserCustomBinder : DefaultModelBinder { public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { if (bindingContext.ModelType == typeof(User)) { var request = controllerContext.HttpContext.Request; string name = request.Form.Get("name")+"testtest"; int age = int.Parse(request.Form.Get("age")); DateTime day = Convert.ToDateTime(request.Form.Get("date")); return new User { name = name, age = age, day = day }; } else { return base.BindModel(controllerContext, bindingContext); } } }
然后再Global.asax.cs中添加UserCustomBinder类。
ModelBinders.Binders.Add(UserCustomBinder);
控制器:
public ActionResult CustModelView() { return View(); } public ActionResult CustModel(User user) { return Content("123"); //在这里下断点 }
视图:
@model dynamic <!DOCTYPE html> <html> <head> <title>title</title> </head> <body> <div> <form method="post" action="/home/CustModel"> <input type="text" name="name" value="" /> <input type="number" name="age" value="" /> <input type="date" name="day"/> <input type="submit" value="submit"/> </form> </div> </body> </html>
填写并提交视图上的表单后可以发现User类已经实现了自定义绑定。