新手到ASP.net MVC 4并尝试理解Razor。如果我想在我的.cshtml页面中显示一些文字,我可以使用
<label class="LabelCSSTop">Introduction</label>
或者我应该使用:
@Html.Label("STW", htmlAttributes: new { @class = "LabelCSSTop" })
不确定一个是否优先于另一个,或者两者是否合适。如果后者发出标签标签,我应该坚持前者吗?
同样,如果我只是想显示一个文本框,我可以这样做:
<input id="txtName" type="text" />
或者我应该这样做:
@Html.TextBox("txtName", "")
是否应该在常规html标签上使用@Html?
提前致谢!!
答案 0 :(得分:13)
如果是标签摘要,则无关紧要。我会选择更简单的语法(纯HTML)。
大多数辅助方法也不允许您包围另一个元素。选择使用/不使用时可以考虑这一点。
但是,值得注意的是,您使用@Html.[Element]For<T>()
方法获得了重要功能。请注意方法名称末尾的“For”。
示例:
@Html.TextBoxFor( o => o.FirstName )
这将根据对象层次结构(对模型绑定至关重要)处理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>
使用纯HTML和代码时,只要呈现视图就必须执行代码,这会带来轻微的性能优势,但这应该不是决定因素。
答案 1 :(得分:2)
取决于你在做什么。
如果您有SPA(单页应用程序),您可以使用:
<input id="txtName" type="text" />
建议使用Html帮助程序,以使控件与模型绑定。
答案 2 :(得分:2)
如果您只想在.cshtml页面中显示一些文字,我不建议使用@ Html.Label,也不要使用html标签。 The element represents a caption in a user interface.并且你会看到,在@ Html.Label的情况下,添加了一个 for 属性,引用了一个可能不存在的元素的id。此属性的值是模型字段的值,其中非字母数字由下划线替换。 你应该使用 @ Html.Display 或 @ Html.DisplayFor ,可能包含在一些普通的html元素行span或p中。
答案 3 :(得分:1)
帮助程序主要用于帮助您为模型的强类型属性显示标签,表单输入等。通过使用帮助程序和Visual Studio Intellisense,您可以大大减少生成网页时可能产生的拼写错误的数量。
说到这一点,您可以继续为视图模型的属性或要显示的不属于视图模型的项目手动创建元素。
答案 4 :(得分:1)
说到标签,我会说这取决于你喜欢什么。例如,对HTML帮助器标签有用的一些例子是
@Html.LabelFor
,@Html.TextBoxFor
等@Html.EditorFor
时,因为您可以在编辑器视图中指定特定行为,所以答案 5 :(得分:-1)