我阅读了ScottGu对Strongly Typed Html Helpers的解释,我理解它使我能够更好地对视图进行编译时检查。当我在MVC1 Html.TextBox帮助器中使用model.PropertyName时,我的印象是我已经有了这个,但显然这不是真的。那么,使用lambda表达式如何更好地为我做这件事呢?
答案 0 :(得分:13)
考虑现有HTML帮助程序方法的语法:
<%= Html.TextBox("Quantity", Model.Quantity) %>
如果将对象的Quantity
属性重命名为“CurrentQuantity”,则生成的<input>
元素仍将指定name="Quantity"
,如果您不记得,模型绑定将会中断改变第一个参数。
通过使用lambda表达式指定元素的名称,不正确或拼写错误的属性名称将成为编译错误。
<!-- No magic strings here! -->
<%= Html.TextBoxFor(model => model.CurrentQuantity) %>
答案 1 :(得分:2)
当您为帮助程序指定属性的名称时,会出现改进。对于强类型帮助程序,它使用lambda表达式而不是属性名来确定要使用的属性值。
<%= Html.TextBox( "Name" ) %>
VS
<%= Html.TextBox( m => m.Name ) %>
答案 2 :(得分:0)
当您错误地提到属性名称时,Textbox不会给出编译时错误。它会抛出运行时异常。 TextBoxFor是一种遗传方法,因此当您错误地提到属性名称时,它会给出编译时错误。 当我们在视图
中追加两个属性名称时,TextBoxFor会很有用@Html.TextBox( "Name" ,"value",new { @class="class"})
VS
@Html.TextBoxFor( m => m.Name, new { @id="txtValue"})