html控件和controFor之间的区别

时间:2010-04-25 21:26:38

标签: asp.net-mvc

mvc HTML.Control和ControlFor(TextBox,复选框等)有什么区别..

3 个答案:

答案 0 :(得分:2)

HTML帮助器方法的For版本将属性作为强类型lambda表达式而不是字符串。

例如,以下to语句是等效的:

<%=Html.TextBox("Description") $>
<%=Html.TextBoxFor(m => m.Description) $>

但是,如果重命名Description属性,TextBoxFor调用将给出编译器错误,而TextBox调用在您访问该页面之前不会失败。

答案 1 :(得分:2)

一个是强类型的。如果您的视图需要具有属性“CustomerName”的Customer类型的模型,则可以使用任一方式呈现值

<%=Html.Label("CustomerName") %> 

<%=Html.LabelFor(a => a.CustomerName) %> //strongly typed

使用第二种方法(lambda表达式),可以避免使用魔术字符串。您还可以检查ModelMetadata以执行其他自定义。

在此处阅读模型元数据:

http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-2-modelmetadata.html

答案 2 :(得分:1)

以下文章解释了一般的差异:

http://weblogs.asp.net/scottgu/archive/2010/01/10/asp-net-mvc-2-strongly-typed-html-helpers.aspx

简单地说,HTML.ControlFor是强类型的,允许使用lambda表达式并自动获取指定为控件名称/ id的属性的名称。