12

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 的情况?

提前致谢!!

4

6 回答 6

13

对于您的标签片段,这并不重要。我会选择更简单的语法(纯 HTML)。

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

强类型等价物

然而,值得注意的是,您使用何种@Html.[Element]For<T>()方法获得了重要的功能。请注意方法名称末尾的“For”。

例子:

@Html.TextBoxFor( o => o.FirstName )

这将处理基于对象层次结构的 ID/名称创建(这对于模型绑定至关重要)。它还将添加不显眼的验证属性。这些方法将表达式作为参数,该参数引用模型中的属性。此属性的元数据由 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 与在呈现视图时必须执行的代码相比,有一点性能优势,尽管这应该是决定因素。

于 2013-04-25T18:39:39.900 回答
2

取决于你在做什么。

如果您有 SPA(单页应用程序),您可以使用:

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

否则,建议使用 Html 帮助程序,以使您的控件与模型绑定。

于 2013-04-25T18:43:02.763 回答
2

如果您只想在 .cshtml 页面中显示一些文本,我不推荐 @Html.Label 也不推荐使用 html 标签。该元素表示用户界面中的标题。您会看到在@Html.Label 的情况下,添加了一个for属性,指的是一个可能不存在的元素的id。该属性的值为模型字段的值,其中非字母数字用下划线代替。您应该使用@Html.Display@Html.DisplayFor,可能包含在一些普通的 html 元素 line span 或 p 中。

于 2013-09-05T14:36:45.913 回答
1

帮助器主要用于帮助您为模型的强类型属性显示标签、表单输入等。通过使用帮助程序和 Visual Studio Intellisense,您可以大大减少生成网页时可能出现的拼写错误的数量。

话虽如此,您可以继续为视图模型的属性或要显示的不属于视图模型的项目手动创建元素。

于 2013-04-25T18:39:07.137 回答
1

说到标签,我想说这取决于你喜欢什么。例如,它可以与 HTML 帮助标签一起使用的一些示例

  • 处理超链接时,因为 HTML 助手简化了路由
  • 当您绑定到模型时,使用@Html.LabelFor,@Html.TextBoxFor
  • 当您使用 时@Html.EditorFor,您可以在编辑器视图中指定特定的行为 och 外观
于 2013-04-25T18:43:19.730 回答
-1

@html.label 和 @html.textbox 在您想以一种简单的方式将其绑定到您的模型时使用......这无法通过输入等方式在一行中实现

于 2013-04-25T18:38:58.830 回答