Вопрос

Было много дискуссий о механизмах просмотра для ASP.NET MVC и некоторых критических замечаний по поводу встроенного " tag-soup " с циклами и тому подобное.

Альтернативой или дополнением было использование HTML-помощников, которые являются просто встроенными вызовами методов.

Сегодня, когда я смотрю в HTML-помощники ASP.NET MVC, они используют класс TagBuilder .

Я предлагаю использовать LINQ to XML, чтобы получить строго типизированный и правильно отформатированный (X) HTML .

XDocument output = new XDocument();
XElement root = new XElement("div",
    new XAttribute("class", "root_item"));

XElement iconImage = new XElement("img",
    new XAttribute("src", ResolveUrl("~/image.gif")),
    new XAttribute("alt", "This is an image"));

XElement link = new XElement("a",
    new XAttribute("class", "link"),
    new XAttribute("href", "http://google.com"),
    new XText("Link to Google"));


root.Add(link);
root.Add(iconImage);
output.Add(root);

Мне это нравится, потому что это похоже на строго типизированные элементы управления в WebForms, где вы можете создать новую кнопку и добавить ее в коллекцию элементов управления другого элемента управления.

Есть ли какие-либо очевидные проблемы или ограничения в этом?

Это было полезно?

Решение

Я могу думать о двух проблемах вышеупомянутого метода. Во-первых,

XElement iconImage = new XElement("img",
new XAttribute("src", ResolveUrl("~/image.gif")),
new XAttribute("alt", "This is an image"));

Ссылаясь на то, что вы пишете выше, мы можем получить что-то вроде:

<img src=<%=whatever%> alt=<%=whatever%> />

Это может быть личное суждение или что-то подобное, но я, безусловно, проголосую за еще один " human " удобочитаемый. Правильно, использование LINQ 2 XML может избавить от странного & Lt;%}% & Gt; это блуждает в моих страницах aspx, но в то же время, вы делаете это " хорошие мальчики " выглядит неуклюже

Во-вторых, может возникнуть проблема с производительностью. Я думаю, что синтаксический анализ и выполнение LINQ 2 XML может быть довольно медленным, хотя у меня нет никаких данных по этому поводу.

Лично я все еще экспериментирую с платформой MVC, похоже, что я возвращаюсь к старым временам, таким как ASP или PHP 3.X, так как почти все интерактивные части обрабатываются явно, а не ориентированная на окна / GUI-OOP ASP Dot Net Фреймворк. Я думаю, что основная причина, по которой я буду использовать MVC, заключается в том, что он может гарантировать наилучшее качество HTML-кодов на стороне клиента.

Другие советы

Это отличная идея! Единственная проблема, которую я вижу, это использование C #. ;) В VB.NET значительно улучшена поддержка создания XML с помощью функции XML-литералов.

Код, который вы перечислите в своем вопросе, может быть написан так в VB.NET. (С добавлением текста & Quot; это ссылка & Quot; , поскольку в вашем примере не было текста внутри элемента a.)

Dim root = <div class="root_item">
               <img src=<%= ResolveUrl("~/image.gif") %> alt="This is an image"/>
               <a class="link" href="http://google.com">This is a link</a>
           </div>

Есть еще теги <%= ... %>, но они проверяются на достоверность во время компиляции. Если этот код был возвращен функцией, возвращающей тип XElement, этот фрагмент Xhtml можно было бы повторно использовать в другом месте сайта.

У меня есть проект на CodePlex, который использует литералы XML VB.NET в качестве настраиваемого механизма просмотра ASP.NET MVC по адресу http: //vbmvc.codeplex.com . Он основан на коде от Дмитрий Робсман , руководитель отдела продуктов для ASP.NET в Microsoft. Представления - это классы VB.NET, а мастер-страницы - базовые классы. Вы new-up используете классы с частичным представлением вместо ссылки на них через строку имени, так что это также дополнительная проверка во время компиляции. Вместо класса HtmlHelper, который возвращает строки, есть класс XhtmlHelper, который возвращает XElement и работает аналогично тому, что вы предложили.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top