2008-10-13 45 views
7

在ASP.NET的视图引擎/模板ASPX/ashx的页面吐到屏幕的方式似乎是:微软MVC“回声/打印/输出”等

<%= Person.Name %> 

这是很好用的WebForms为很多的模型数据必然以编程方式控制。但是对于MVC,我们现在更习惯使用这种语法。

我与它有关的问题是相当微不足道的,但恼人的任何一种方式。这是它似乎打破了标记,即:

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

这似乎很多开放和结束标签给我!在MVC的contrib

其他视图引擎具有吐出与出开口来筛选和关闭使用标准关键字脚本标记如的手段“打印,走出,回声”,即(抄网示例):

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

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

干杯,克里斯。

回答

11

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

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

我相信会工作。 (虽然我没有测试它,我才刚刚开始与MVC和没有在这里有工具集在办公室。)

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

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

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

如果你头部到Learn MVC site on ASP.NET,在视图教程(这是链接),你会看到以下内容:

既然你叫Response.Write()所以 通常,微软提供了一个 用于调用 Response.Write()方法的快捷方式。 中的视图清单3使用分隔符<%=%>作为拨打 Response.Write()的快捷方式。

从本质上讲,<%= %>Response.Write接受的快捷方式,因此您可以使用完整的Response.Write方法的任何地方,你会使用<%= %>

+0

完美的作品。 – 2008-10-13 14:05:34

+1

虽然,在Response.Write声明结尾处需要一个分号。 – 2008-10-13 14:07:50

+0

我的不好!我会再次更新。 :) – 2008-10-13 14:08:20

0

你正在寻找的可能是一个不同的视图引擎 - 它们每个都以自己的方式处理嵌入的代码。检查出NHaml,Rails的Haml引擎的ASP.Net端口。

一些更视图引擎来看待:BrailNVelocity

0

谢谢你们,我不特别要切换视图引擎,但我需要时间来看看其他avaliable。我相信你可以理解大多数MS开发公司不会触摸除MS品牌的技术之外的任何东西,所以我只想知道是否有方法使用默认视图引擎来完成此操作。如果不是,为什么不呢?是否有一个原因,如果不是我在哪里可以建议默认视图编译器添加这样的关键工作。

John-我相信Response.Write(Person.Name)只会在任何其他输出之前将字符串呈现到页面的顶部。虽然不是100%,但生病了吧。

编辑:

显然,回复于(Person.Name)工作的建议。那很容易。谢谢:-)约翰。

+0

检查http://www.asp.net/learn/mvc/tutorial-04-cs.aspx。 <%= %>是Response.Write的快捷方式。 – 2008-10-13 14:10:38

0

我听说他们正在通过客户端模板来改进ASP.Net 4。

0

比其他的Response.Write另一个选择是我的答案是基于个人XP时MVC4 CSHTML与XSL transformations

1

写XHTML - 您可以使用: @Html.Raw("SomeStringDirectlyInsideTheBrowserPageHTMLCode")

这使得(动态)字符串在它的位置,不像Response.Write(MyString),据我所知,总是呈现在浏览器页面开始的字符串。

请注意,编译器无法检查由@Html.Raw(MyString)呈现的HTML标记。我的意思是:@ Html.Raw(“< div .... >”)不能仅仅由于</div >而关闭,因为你会得到一个错误(< div .... >未被编译器检测到),所以你必须用@ Html.Raw关闭标签(“</div >”)

PS
在某些情况下,这不起作用(例如,它在DevExpress中失败) - 使用ViewContext.Writer.Write()ViewContext.Writer.WriteLine()代替。