假设我在一个.aspx页面(或View,对于MVC人员)工作,我有一块内联代码:
<p>Some HTML and content</p>
<% foreach (var x in foo) { %>
<%= x.myProperty %>
<% } %>
<p>Moar HTMLz</p>
与此模型相比,是否有更高效,更简单的方法将文本提取到标记中?似乎有很多<%
的
编辑我想我真正想问的是,如果有更好的方法可以从代码块获取页面上的文本而不离开代码块,重新进入代码块,然后重新进入封闭的代码块。
答案 0 :(得分:3)
如果目标严格要少于&lt; %%&gt;各部分,你可以写出很长的路,但这几乎不是一个改进:
<% foreach (var x in foo) {
Response.Write(Html.Encode(x.MyProperty));
} %>
如果您只想将其保留在aspx页面之外,可以将其移至控件:
<% Html.RenderPartial("properties", foo); %>
这种技术的一个优点是你可以使用不同的视图引擎(比如说,NHaml),同时仍然保持你的aspx页面(视图)的一般结构。
答案 1 :(得分:2)
为可枚举集合创建扩展方法:
public static void Each<T>(this IEnumerable<T> list, Action<T> fn)
{
foreach (T item in list)
fn(item);
}
然后做:
foo.Each((i) => Response.Write(Html.Encode(x.MyProperty)));
或者,为了使其更加简单,请使用自定义视图页面(对于MVC)或自定义页面类(对于Web表单),其具有已经为您执行此操作的方法:
public void WriteText(string coreText)
{
Response.Write(Html.Encode(coreText));
}
让它更容易。扩展方法确实有助于此。