Есть ли лучший, менее громоздкий способ извлечения встроенного текста, чем <% =%>? - PullRequest
1 голос
/ 23 декабря 2009

Допустим, я работаю на странице .aspx (или View, для людей MVC) и у меня есть блок встроенного кода:

<p>Some HTML and content</p>

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

<p>Moar HTMLz</p>

Есть ли более эффективный, менее громоздкий способ извлечения текста в разметку, чем эта модель? Кажется, что есть много <% х

РЕДАКТИРОВАТЬ Я думаю, что я действительно спрашиваю, есть ли лучший способ получить текст на странице из кодового блока, не выходя из блока кода, повторно входя в блок кода, а затем снова вводя кодовый блок.

Ответы [ 2 ]

3 голосов
/ 23 декабря 2009

Если цель состоит в том, чтобы строго иметь меньше разделов <%%>, вы можете написать это далеко, но вряд ли это улучшение:

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

Если вы просто хотите сохранить его вне страницы aspx, вы можете переместить его в элемент управления:

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

Одним из преимуществ этой техники является то, что вы можете использовать другой механизм представления (скажем, NHaml) для частичного, сохраняя при этом общую структуру вашей страницы aspx (представление) в такте.

2 голосов
/ 23 декабря 2009

Создание метода расширения для перечислимых коллекций:

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) или пользовательский класс страницы (для веб-форм), у которого есть метод, который уже делает это для вас:

public void WriteText(string coreText)
{
    Response.Write(Html.Encode(coreText));
}

Чтобы было еще проще. Методы расширения действительно помогают с этим.

...