1

我正在寻找使用 MVC 设计剃刀视图的最佳实践。

这将是更好的选择:

HtmlHelper 扩展方法

    @Html.TextBox("txtName")

或者
直接写html

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

我发现了 2 个不同的链接。第一个http://blogs.msdn.com/b/aspnetue/archive/2010/09/17/second_2d00_post.aspx使用 HTMLHelper 扩展方法。
第二个http://codeclimber.net.nz/archive/2009/10/27/12-asp.net-mvc-best-practices.aspx10 – 每次可以写 HTML

所以我有点困惑

4

3 回答 3

1

由于您使用的是Razor,我会充分利用它所提供的功能,并且HtmlHelper扩展允许您在很多地方更快、更轻松地编写 html。

有时您可能不得不使用 Html,@Html.ActionLink例如,您可能希望在锚点中包含标签而不能使用 .

但是,如果您可以使用任何一种方法获得相同的结果,我建议您使用Razor.

于 2012-11-09T16:52:58.377 回答
1

甚至名称HtmlHelper也应该已经提示您是否应该使用它。你需要帮忙吗?如果没有,只需从头开始编写 html。html 是如何生成的并不重要:从头开始或使用 html 助手。重要的是它是使用正确的输入名称生成的,以便模型绑定器可以将这些输入绑定到模型。

例如,假设您有以下模型将被传递给视图并在 POST 上接收:

public class SomeModel
{
    public Customer Customer { get; set; }
}

public class Customer
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

为了确保您的输入将绑定到模型,您需要在页面上输入三个输入:

<input type="hidden" id="whatever" name="Customer.Id" /> 
<input type="text" id="whatever" name="Customer.FirstName" />
<input type="text" id="whatever" name="Customer.LastName" />

拥有这个 html 标记将确保正确的模型思维。但是,您可以使用 HtmlHelpers 来实现此标记,这要容易得多:

@Html.HiddenFor(m => m.Customer.Id)
@Html.TextBoxFor(m => m.Customer.FirstName)
@Html.TextBoxFor(m => m.Customer.LastName)

这不仅会name在每个输入上为您提供适当的属性,而且还会相应地分配id属性,因此您不必自己做所有这些。


看来第二篇文章的作者建议不要使用 HtmlHelpers 有两个原因:

  1. 学习目的:我假设说“Web 开发人员必须习惯于编写 HTML”,他的意思是开发人员应该确切地知道正确的模型绑定需要什么 html 标记。
  2. 对黑盒的恐惧:似乎作者害怕使用 HtmlHelpers 会生成不正确的 html 标记,或者他只是不知道会生成什么 html。

我不同意他的说法:“HtmlHelpers 的唯一生存理由就是​​将 HTML 隐藏起来”。我宁愿说“HtmlHelpers,他们唯一的生存理由就是​​帮助编写 Html 标记”


摘要: HtmlHelpers帮助您编写正确的 html 标记,这就是我建议您使用它的原因。

于 2012-11-09T18:03:02.590 回答
0

Html 助手不是只是节省时间的装饰性代码片段。考虑根据模型属性类型选择适当的编辑器,并且 - 这也是非常重要的 - 它们有助于客户端验证,前提是您包括 jquery.unobtrusive-ajax.js 和 jquery.validate.js。
最后一个不能通过简单地编写 HTML 来实现。
从我所说的可以很容易地得出,Html 助手“知道”模型,而普通标记则不知道。
最后由您决定使用什么,但在做出决定时更好地了解 Html 助手。

于 2012-11-09T17:37:17.180 回答