Asp.net mvc 您会使用此ASP.NET MVC视图语法吗?

Asp.net mvc 您会使用此ASP.NET MVC视图语法吗?,asp.net-mvc,Asp.net Mvc,我在中为ASP.NET MVC视图提出了我认为更好的语法。既然这个问题已经得到了回答,我想我的回答不会产生什么反馈,所以我将它作为自己的问题发布在这里。您使用标记来表示代码。我的观点是:在需要代码的地方,只要使用代码就行了,因为代码总是更灵活的。如果需要标记,请使用标记。 这正好解释了我的观点。 但是,有时代码和标记之间的界限是模糊的。我真希望人们不要再把XML当作编程语言。除了maucsch和matt的观点之外,这难道不意味着服务器必须加载到内存中并解析整个页面以查找“mvc:”?这不是不使用

我在中为ASP.NET MVC视图提出了我认为更好的语法。既然这个问题已经得到了回答,我想我的回答不会产生什么反馈,所以我将它作为自己的问题发布在这里。

您使用标记来表示代码。我的观点是:在需要代码的地方,只要使用代码就行了,因为代码总是更灵活的。如果需要标记,请使用标记。 这正好解释了我的观点。
但是,有时代码和标记之间的界限是模糊的。

我真希望人们不要再把XML当作编程语言。

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

你走对了方向,但我认为你走得太远了。平衡点是将代码与html混合在一起,不会使代码过于复杂,也不会创建标记汤。我发现最好的视图引擎是


看看它,你会发现它以一种更微妙和可读的方式解决了你的建议。

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

请参阅。

也许您应该改用“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扩展方法正在促进这一点。感谢这篇文章,它看起来非常有趣,我一定会阅读它-它激发了我对Lisp的兴趣。我也尽量避免使用类似这些()的Html扩展。我在需要标记时使用标记,在需要代码时使用代码。我同意有时候代码行是模糊的,我不喜欢用标记来表示代码,因为:它太冗长了;它没有那么灵活;在这种情况下,这是一个不必要的、可能有漏洞的抽象。MVC视图的最大问题是,如果你不使用HtmlHelpers,你就无法根据路由自动生成链接等。不,这正是视图引擎的工作。嘿,我刚刚要提到Spark:)是的,这太棒了。到目前为止,我一直在每个ASP.NETMVC项目中使用它。这正是他想用mvc实现的:服务器控件。可能更可读。它肯定是更多的文本,并引入了新的标签以及新的属性。不过,它似乎不具备按原样呈现的能力,因此对于HTML布局人员来说并不容易使用。另外,通过引入新的标记,它会影响输出代码的缩进。不过,它看起来非常有用。从我目前的观点来看,基于属性的语法似乎比基于标记的语法更简洁,对开发人员更不友好。这肯定是主观的,但我发现语法与大多数CMS用于模板的语法非常相似。因此,与我共事过的设计师很容易就学会了。这完全忽略了让HTML作为标准HTML内容呈现的意义。所有HTML模板引擎都基于非HTML输入呈现HTML内容。对于某些引擎来说,输入语法在所有细节上都类似于HTML。对于其他引擎,输入语法是为人们阅读和编写而设计的。我认为视图是一个非常受限的用例,它可以很好地工作。(我不喜欢XSL。)我的观点是,我们应该使用在视图中不鼓励复杂代码的平台,通过提供简单的构造,使您能够做正确的事情。循环、if和write似乎涵盖了大部分需求,非常简单。我的观点是:让简单的事情变得简单,让复杂的事情成为可能。这种方法不可能实现复杂的事情,这就是JSP必须引入EL的原因。