【问题标题】:Would you use this ASP.NET MVC view syntax?你会使用这个 ASP.NET MVC 视图语法吗?
【发布时间】:2008-12-24 13:48:16
【问题描述】:

我在this question 中提出了我认为更好的 ASP.NET MVC 视图语法。由于该问题已得到回答,我认为我的回答不会产生什么反馈,因此我将其作为自己的问题发布在这里。

【问题讨论】:

  • 也许我应该在这里重新发布我的答案?
  • 如果可以的话,我会用极端的偏见来结束这个问题
  • 如果你解释清楚你的理由我会删除它...
  • 直截了当地回答你的问题,这是一个糟糕的语法,我会尝试永远不要使用它。相反,我会寻找简洁、富有表现力且真正有意义的东西。请参阅下面的答案。

标签: asp.net-mvc


【解决方案1】:

您正在使用标记来表示代码。我的观点是:在需要代码的地方,就用代码,这样总是更灵活。在需要标记的地方,使用标记。 This article 准确地解释了我的观点。 不过,有时代码和标记之间的界限是模糊的。

【讨论】:

  • 我不明白使用标记表示代码比使用代码表示标记更糟糕,这是通过 Html 扩展方法推广的。
  • 感谢这篇文章,看起来很有趣,我一定会读的——它激起了我对 Lisp 的兴趣。
  • 我也尽量避免使用这样的 Html 扩展 (mark-dot-net.blogspot.com/2008/05/…)。我在需要标记时使用标记,在需要代码时使用代码。我同意有时界限是模糊的。
  • 我不喜欢使用标记来表示代码,因为:它不必要地冗长;它没有那么灵活;在这种情况下,这是一个不必要的,可能是泄漏的抽象。
  • MVC 视图最大的问题是,如果你不使用 HtmlHelpers,你就不能根据路由自动生成链接等。
【解决方案2】:

我真的希望人们不要再将 XML 视为一种编程语言。

【讨论】:

  • 我认为视图是一个非常受限制的用例,它可以很好地工作。 (我不喜欢 XSL。)
【解决方案3】:

也许您应该改用this“MVC 语法”,称为 HAML。

%h2= Model.CategoryName
%ul
  - foreach (var product in Model.Products)
    %li
      = product.ProductName 
      .editlink
        = Html.ActionLink("Edit", new { Action="Edit", ID=product.ProductID })
= Html.ActionLink("Add New Product", new { Action="New" })

替换

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true" 
    CodeBehind="List.aspx" Inherits="MvcApplication5.Views.Products.List" Title="Products" %>
<asp:Content ContentPlaceHolderID="MainContentPlaceHolder" runat="server">
 <h2><%= ViewData.Model.CategoryName %></h2>
  <ul>
    <% foreach (var product in ViewData.Model.Products) { %>
      <li>
        <%= product.ProductName %> 
        <div class="editlink">
          (<%= Html.ActionLink("Edit", new { Action="Edit", ID=product.ProductID })%>)
        </div>
      </li>
    <% } %>
  </ul>
  <%= Html.ActionLink("Add New Product", new { Action="New" }) %>
</asp:Content>

【讨论】:

  • 这完全忽略了让它成为可以呈现为标准 HTML 内容的 HTML 的意义。
  • 所有 HTML 模板引擎都基于非 HTML 输入呈现 HTML 内容。对于某些引擎,输入语法在其所有华丽的冗长方面都类似于 HTML。对于其他引擎,输入语法被设计为可供人们读写。
【解决方案4】:

你在正确的轨道上,但我认为你走得太远了。平衡是将代码与其流动的 html 混合在一起,而不是过度复杂化,也不会创建标签汤。我发现的最好的视图引擎是Spark

看看它,你会发现它以一种更微妙、更易读的方式解决了你提出的问题。

【讨论】:

  • 嘿,我只是要提到 Spark :)
  • 是的,太棒了。到目前为止,我一直在每个 ASP.NET MVC 项目中使用它。这正是他想用他的 mvc 完成的事情:服务器控制。
  • 可能更具可读性。它肯定是更多的文本,并引入了新的标签和新的属性。不过,它似乎没有按原样呈现的能力,因此对于 HTML 布局人员来说并不容易使用。此外,通过引入新标签,它会影响输出代码的缩进。
  • 虽然看起来很实用。从我目前的角度来看,基于属性的语法似乎比基于标签的语法更简洁且对开发人员不友好。
  • 这绝对是主观的,但我发现语法与大多数 CMS 用于模板的语法非常相似。因此,与我合作过的设计师很容易就掌握了它。
【解决方案5】:

还看看 JSP:他们不得不引入“表达式语言”以便在 jsp 标记中获得一些代码的力量。结果真的很尴尬恕我直言。它甚至需要一个显式映射(当然是在 XML 中)才能从这个表达式语言访问一个简单的函数。

this

【讨论】:

  • 我的观点是,我们应该使用在视图中不鼓励复杂代码的平台,通过提供易于让您做正确事情的简单结构。循环、Ifs 和写入似乎涵盖了大部分需求,非常简单。
  • 对此我的看法:让简单的事情变得简单,让复杂的事情成为可能。这种方法不可能完成复杂的事情,这就是 JSP 必须引入 EL 的原因。
【解决方案6】:

除了 maucsch 和 matt 的观点之外,这是否也意味着服务器必须加载到内存中并解析整个页面以查找“mvc:”?这难道不是不使用网络表单的原因之一吗?

【讨论】:

  • 不,这正是视图引擎的工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-24
  • 2013-09-23
相关资源
最近更新 更多