提取内联文本比使用<%=%>?

时间:2009-12-23 01:45:02

标签: c# asp.net asp.net-mvc inline-code

假设我在一个.aspx页面(或View,对于MVC人员)工作,我有一块内联代码:

<p>Some HTML and content</p>

<% foreach (var x in foo) { %>
   <%= x.myProperty %>
<% } %>

<p>Moar HTMLz</p>

与此模型相比,是否有更高效,更简单的方法将文本提取到标记中?似乎有很多<%

编辑我想我真正想问的是,如果有更好的方法可以从代码块获取页面上的文本而不离开代码块,重新进入代码块,然后重新进入封闭的代码块。

2 个答案:

答案 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));
}

让它更容易。扩展方法确实有助于此。