Asp.net mvc 2模型绑定了幕后的幕后故事

时间:2010-08-30 07:36:54

标签: asp.net asp.net-mvc asp.net-mvc-2 modelbinders

我从MVC2开始,我有一个简单的问题:

如果我有一个带有表单的打字视图,并且这个文本框是用lambda表达式创建的:

 <%: Html.TextBoxFor(e => e.Name)%>

当我提交此表单时,默认模型绑定器会获取请求表单,将模型键入视图,序列化发布的数据(作为此模型)并将其传递给我的控制器的操作。

为了更好地解释自己,让我们想象一下我有一个像localhost / edittestmodel / ID / 1的网址,我在我的控制器操作中有以下代码:

public ActionResult Edit(int id)
{
    TestModel testmodel=new TestModel();
    testmodel.Name="texttorenderintotextbox";
    //whats the class that place the testmodel properties into the view? 
    return View(testmodel);

}

将testmodel对象的Name属性放入文本框的责任类是什么

<%: Html.TextBoxFor(e => e.Name)%>

提前致谢。

最诚挚的问候。

何。

2 个答案:

答案 0 :(得分:1)

负责从lambda表达式生成输入字段的TextBoxFor辅助方法。

答案 1 :(得分:0)

View在POST请求和模型绑定中没有任何关系

当您拥有强类型视图时,模型类型几乎不能用于在视图代码中使用简单的代码智能感知(因此您可以像示例中一样使用lambda表达式)。

但是当您回发POST数据时,不会对视图进行任何检查。但是它会根据控制器操作参数进行检查。如果有一个具有特定自定义模型绑定器类型的参数,则使用该特定模型绑定器来处理传入数据。

但要回答您的问题TextBoxFor检查您的强类型视图的模型,并生成具有正确名称属性的特定文本框。因此,来自它的数据将以正确的表单字段名称发回。

更进一步。它是视图引擎,它解析视图的ASPX代码并运行所有服务器端脚本,包括Html.TextBoxFor()调用。