使用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有什么优势,而不提供输出方法呢?
干杯,克里斯。
答案 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)
答案 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