Microsoft MVC“echo / print / output”等

时间:2008-10-13 13:53:42

标签: asp.net asp.net-mvc

使用ASP.NET的视图引擎/模板aspx / ashx页面吐出到屏幕的方式似乎是:

<%= Person.Name %>

对于webforms来说很好,因为许多模型数据以编程方式绑定到控件上。但是对于MVC,我们现在更多地使用这种语法。

我遇到的问题非常简单,但无论如何都很烦人。这似乎打破了标记,即:

<% foreach(var Person in People) { %>
    <%= Person.Name %>
<% } %>

这对我来说似乎有很多打开和关闭的标签!

MVC contrib中的其他视图引擎有一种吐出到屏幕的方法,不使用标准关键字打开和关闭脚本标记,例如“print,out,echo”,即(brail example):

<% 
for element in list:
      output "<li>${element}</li>" 
end
%>

现在,我说这看起来似乎微不足道,但这种方式似乎更具可读性。那么具有这种语法的MS有什么优势,而不提供输出方法呢?

干杯,克里斯。

6 个答案:

答案 0 :(得分:11)

考虑这样的事情,而不是:

<% foreach(var Person in People) { 
    Response.Write(Person.Name); 
} %>

我相信这会奏效。 (虽然我还没有对它进行过测试;我刚刚开始使用MVC而且办公室里没有工具集。)

编辑:我显然错过了实际问题......:)

Microsoft确实提供了输出方法,但未提供与您描述的语法类似的语法。输出方法是Response.Write()。我不能直接回答这个问题(我相信你需要在MS上查看Scott Hanselmann :)),但我认为他们不想通过添加另一种语言让我们学习来复杂化脚本。我认为他们想利用开发人员已经知道的语言(C#,VB等)。

编辑#2:我将以下内容放在评论中,回想起来(为了完整性),它应该是答案的一部分。

如果你转到Learn MVC site on ASP.NET,在视图教程中(这是链接),你会看到以下段落:

  

因为你打电话给Response.Write()   通常,微软为您提供了一个   调用的快捷方式   Response.Write()方法。中的观点   清单3使用了分隔符<%=和   %>作为通话的捷径   Response.Write()

基本上,<%= %>Response.Write的可接受快捷方式,因此您可以在任何使用Response.Write的地方使用完整的<%= %>方法。

答案 1 :(得分:1)

我的回答是基于个人XP和MVC4 cshtml - 您可以使用:     @Html.Raw("SomeStringDirectlyInsideTheBrowserPageHTMLCode")

这会将(动态)字符串呈现在与Response.Write(MyString)不同的位置,就我所注意到的那样,总是在浏览器页面的开头呈现字符串。

请注意,编译器无法检查@Html.Raw(MyString)呈现的HTML标记。我的意思是:@ Html.Raw(&#34;&lt; div ....&gt;&#34;)不能仅仅通过&lt; / div&gt;来关闭因为你会收到一个错误(编译器没有检测到&lt; div ....&gt;)所以你必须用@ Html.Raw关闭标签(&#34;&lt; / div&gt;&#34;)< / p>

P.S。在某些情况下,这不起作用(例如在DevExpress中失败) - 改为使用ViewContext.Writer.Write()ViewContext.Writer.WriteLine()

答案 2 :(得分:0)

您正在寻找的可能是一个不同的View引擎 - 它们各自以自己的方式处理嵌入式代码。查看NHaml,一个Rails'Haml引擎的ASP.Net端口。

要查看的更多视图引擎:BrailNVelocity

答案 3 :(得分:0)

谢谢大家,我不是特别想切换视图引擎,虽然我会花时间看看另一个可用的。我相信你可以理解,大多数MS开发公司除了MS品牌技术之外什么也不接触,所以我只是想知道是否有办法用默认的视图引擎做到这一点。如果没有,为什么不呢?有没有原因,如果没有,我可以建议默认视图编译器添加这样的关键字。

John-我相信Response.Write(Person.Name)只会在任何其他输出之前将字符串呈现在页面顶部。虽然不是100%,但是给它一个bash。

编辑:

显然,Response.Write(Person.Name)按照建议工作。那很容易。谢谢:-) John。

答案 4 :(得分:0)

我听说他们正在通过客户端模板为ASP.Net 4改进这项工作。

答案 5 :(得分:0)

除Response.Write之外的另一个选项是用XSL transformations

编写XHtml