【问题标题】:best practice for mvc razor view layoutmvc razor 视图布局的最佳实践
【发布时间】:2012-10-30 00:36:33
【问题描述】:

我正在寻找使用 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

所以我有点迷茫

【问题讨论】:

  • 任何你觉得更舒服的东西。只需选择一种设计并始终保持一致

标签: asp.net-mvc razor


【解决方案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. 对黑框的恐惧:看来作者是怕不合适的html 标记将通过使用 HtmlHelpers 生成,或者他只是不 知道会生成什么 html。

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


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

【讨论】:

  • 但是如果我想让 Web 开发人员为我修改布局会怎样?只有剃刀标记,他/她怎么能在网络浏览器中看到 disegn?
  • 布局与表格无关。 HtmlHelpers 主要用于为输入创建 html 标记,而不是布局。您似乎对 HtmlHelpers 实际实现的目标有些困惑。也许,如果您用您要解决的问题的具体示例修改您的问题,我可以更好地指导您。
  • Charly - 但是如果我想让 Web 开发人员为我修改布局怎么办?。您的 Web 开发人员应该了解 Web 开发。你是说前端设计师吗?在这种情况下,让他们设计一个适当抽象的表示层的表单(例如,在为这个表单创建 CSS 时请使用类而不是 ID 或名称)。向 MVC HtmlHelpers 添加类是相当直接的 - stackoverflow.com/questions/8465133/…。或者,向他们提供表格并等待他们提出问题或查找。
  • @AaronNewton 我的意思是,例如,如果 Web 开发人员在 Dreamweaver 中打开布局,它会显示 HtmlHelper 标记而不是正确的 html 标记
  • Web 开发人员 不应在 Dreamweaver 中打开他的工作。但是,这是一个侧面说明。确实会有 HtmlHelper 标记。从事该项目的开发人员应该能够理解它并预见将输出什么 html 标记。
【解决方案2】:

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

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

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

【讨论】:

  • 我同意。我想补充一点,输入 HTML 代码是绝对的——除了直接编辑 HTML 标记之外,您将无法对其进行修改,并且您需要为每个实例更改标记(或多或少是 Tyler 刚才所说的) .另一方面,可以自定义 HtmlHelper,并用于在许多地方一致地添加标记asp.net/mvc/tutorials/older-versions/views/…。您还可以覆盖该行为 - forums.asp.net/t/1574560.aspx/1
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 2011-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多