Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC如何知道如何填充您的模型来为控制器提供数据;什么行动?它是否涉及反思?_C#_.net_Asp.net_Asp.net Mvc_Asp.net Mvc 3 - Fatal编程技术网

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类的方法。当然,您总是可以创建一个避免反射的视图