1

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

<p>Some HTML and content</p>

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

<p>Moar HTMLz</p>

有没有比这个模型更有效、更简单的方法来将文本提取到标记中?好像有<%很多

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

4

2 回答 2

3

如果目标是严格减少 <% %> 部分,则可以将其写得很长,但这几乎不是改进:

<% foreach (var x in foo) {
       Response.Write(Html.Encode(x.MyProperty));
   } %>

如果您只想将其保留在 aspx 页面之外,则可以将其移动到控件中:

<% Html.RenderPartial("properties", foo); %>

这种技术的一个优点是您可以为局部使用不同的视图引擎(例如 NHaml),同时仍然保持您的 aspx 页面(视图)的一般结构完好无损。

于 2009-12-23T01:48:31.760 回答
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));
}

让它变得更容易。扩展方法确实对此有所帮助。

于 2009-12-23T02:24:32.857 回答