mvc剃刀视图布局的最佳实践

时间:2012-11-09 16:48:24

标签: asp.net-mvc razor

我正在寻找使用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表示 DO使用HTMLHelper扩展方法。
第二个http://codeclimber.net.nz/archive/2009/10/27/12-asp.net-mvc-best-practices.aspx 10 - 每次可以写HTML

所以我有点被照顾

3 个答案:

答案 0 :(得分:1)

由于您使用的是Razor,因此我会充分利用它提供的功能,HtmlHelper扩展程序可让您在很多地方更快速,更轻松地编写HTML。

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

但是,无论采用哪种方法,您都可以获得相同的结果,我建议您使用Razor

答案 1 :(得分: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标记可确保正确的模型管理。但是,您可以通过使用HtmlHelper来实现此标记,这更容易:

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

这不仅可以为每个输入提供正确的name属性,还可以相应地分配id属性,因此您无需自己完成所有操作。


似乎第二篇文章的作者建议永远不要使用HtmlHelpers,原因有二:

  1. 学习目的:我假设“网络开发人员必须这样做 很舒服地写HTML“他的意思是开发人员应该知道 正确的模型绑定需要什么样的html标记。
  2. 对黑匣子的恐惧:似乎作者害怕不正确的HTML     标记将通过使用HtmlHelpers生成,或者他只是不生成     知道会生成什么样的HTML。
  3. 我不同意他的观点:“HtmlHelpers,其唯一的生存理由是将HTML隐藏起来”。我宁愿说“HtmlHelpers,其唯一的生存理由是帮助编写Html标记”


    <强>要点: HtmlHelpers 帮助你写了正确的html标记,这就是为什么我建议你使用它。

答案 2 :(得分:0)

Html帮助程序不是化妆品代码片段,只是节省时间。考虑选择适当的编辑器基于模型属性类型,并且 - 这也非常重要 - 它们有助于客户端验证,前提是包括jquery.unobtrusive-ajax.js和jquery.validate.js。 简单地写HTML就无法实现最后的目标 从我所说的可以很容易地推导出Html帮助者“知道”模型,而普通标记则没有 最后由您来决定使用什么,但在做出决定时,了解更多有关Html助手的信息会更好。