C# ASP.NET MVC如何知道如何填充您的模型来为控制器提供数据;什么行动?它是否涉及反思?
定义了C# ASP.NET MVC如何知道如何填充您的模型来为控制器提供数据;什么行动?它是否涉及反思?,c#,.net,asp.net,asp.net-mvc,asp.net-mvc-3,C#,.net,Asp.net,Asp.net Mvc,Asp.net Mvc 3,定义了模型 public class HomeModel { [Required] [Display(Name = "First Name")] public string FirstName { get; set; } [Required] [Display(Name = "Surname")] public string Surname { get; set; } } 并且具有以下控制器 public class HomeControlle
模型
public class HomeModel {
[Required]
[Display(Name = "First Name")]
public string FirstName { get; set; }
[Required]
[Display(Name = "Surname")]
public string Surname { get; set; }
}
并且具有以下控制器
public class HomeController : Controller {
[HttpPost]
public ActionResult Index(HomeModel model) {
return View(model);
}
public ActionResult Index() {
return View();
}
}
通过某种“神奇”的机制,ASP.NET MVC将HomeModel
中的值填满。有人知道怎么做吗
从一些基本测试来看,它似乎会查看POST响应,并尝试将响应对象名称与模型的属性相匹配。但要做到这一点,我想它必须使用反射?这不是天生的慢吗
谢谢是的,你说的是神奇的
ModelBinder
ModelBinder
负责创建一个模型,并使用表单post back中的值对其进行水合,并执行验证,其结果将显示在ModelState
中
默认实现是,但您可以自己插入。DefaultModelBinder确实使用反射来设置模型的属性。更具体地说,它使用PropertyDescriptor类的方法。当然,您总是可以创建一个避免反射的视图