label或@html.Label ASP.net MVC 4

alp*_*pha 12 razor asp.net-mvc-4

新手到ASP.net MVC 4并尝试理解Razor.如果我想在我的.cshtml页面中显示一些文本,我可以使用

<label class="LabelCSSTop">Introduction</label>
Run Code Online (Sandbox Code Playgroud)

或者我应该使用:

 @Html.Label("STW", htmlAttributes: new { @class = "LabelCSSTop" })
Run Code Online (Sandbox Code Playgroud)

不确定一个是否优先于另一个或两者是否正常.如果后者发出标签标签,我应该坚持前者吗?

同样,如果我只是想显示一个文本框,我可以这样做:

<input id="txtName" type="text" />

或者我应该这样做:

@Html.TextBox("txtName", "")

我是否应该在常规html标签上使用@Html?

提前致谢!!

Tim*_*ora 13

对于您的标签代码段,它并不重要.我会选择更简单的语法(纯HTML).

大多数辅助方法也不允许您包围另一个元素.选择使用/不使用时,这可能是一个考虑因素.

强类型等价物

但是,值得注意的是,您使用@Html.[Element]For<T>()获得重要功能的方法.请注意方法名称末尾的"For".

例:

@Html.TextBoxFor( o => o.FirstName )
Run Code Online (Sandbox Code Playgroud)

这将根据对象层次结构(对模型绑定至关重要)处理ID /名称创建.它还将添加不显眼的验证属性.这些方法将Expression作为参数,它引用模型中的属性.这个属性的元数据是由MVC框架获得的,因此它"知道"更多关于属性的信息,而不是它的字符串 - 参数对应物.

它还允许您以强类型方式处理UI代码.Visual Studio将突出显示语法错误,而使用字符串则无法突出显示语法错误.视图也可以选择与解决方案一起编译,允许进行额外的编译时检查.

其他考虑因素

有时,HTML帮助程序方法还会执行其他有用的任务,例如,Html.Checkbox并且Html.CheckboxFor还会创建一个隐藏字段以与复选框一起使用.另一个例子是路由感知的与URL相关的方法(例如用于超链接).

<!-- bad -->
<a href="/foo/bar/123">my link</a>

<!-- good -->
@Html.ActionLink( "my link", "foo", "bar", new{ id=123 } )

<!-- also fine (perhaps you want to wrap something with the anchor) -->
<a href="@Url.Action( "foo", "bar", new{ id=123 } )"><span>my link</span></a>
Run Code Online (Sandbox Code Playgroud)

使用纯HTML和代码时,只要呈现视图就必须执行代码,这会带来轻微的性能优势,尽管这应该是决定因素.