На моем сайте ASP.NET MVC 2 много просмотров с большим содержанием.Они содержат несколько повторяющихся шаблонов HTML.При использовании ASP.NET Webforms класс, производный от WebControl, может инкапсулировать эти шаблоны.Мне бы хотелось несколько советов о правильном подходе к этой проблеме с MVC.
Подробное объяснение
Шаблоны, не похожие на следующую HTML-разметку, продолжают появляться во всех этих представлениях.Разметка представляет собой изолированную коробку содержимого:
<div class="top container">
<div class="header">
<p>The title</p>
<em>(and a small note)</em>
</div>
<div class="simpleBox rounded">
<p>This is content.</p>
<p><strong>Some more content</strong></p>
</div>
</div>
Это тривиальный пример, но существуют более сложные повторяющиеся шаблоны.В ASP.NET Webforms я бы абстрагировал такой код в WebControl (скажем, я бы назвал его BoxControl), добавив его на страницу, подобную этой:
<foo:BoxControl runat="server">
<Header>The title</Header>
<Note>(and a small note)</Note>
<Content>
<p>This is content.</p>
<p><strong>Some more content</strong></p>
</Content>
</foo:BoxControl>
Эта абстракция облегчает адаптациюспособ построения бокса по всему сайту, просто изменив исходный код BoxControl.Он также аккуратно сохраняет статический HTML-контент на странице просмотра, даже при объединении нескольких элементов BoxControl на странице.Еще одним преимуществом является то, что HTML, используемый в качестве контента, распознается в среде IDE, что обеспечивает подсветку / проверку синтаксиса.
Насколько я понимаю, WebControls не рекомендуется использовать в ASP.NET MVC.Вместо WebControl я мог бы выполнить абстракцию с частичным представлением.Такое представление затем будет включено в страницу просмотра следующим образом:
<%= Html.Partial("BoxControl", new {
Header="The Title",
Note="(and a small note)",
Content="<p>This is content.</p><p><strong>Some more content</strong></p>"});
%>
Это не идеальный вариант, поскольку параметр «Content» может стать очень длинным, а IDE при его передаче не обрабатывает его как HTML.сюда.
Рассмотренные решения Сильно типизированные ViewModels могут быть переданы в вызов Html.Partial вместо длинных параметров, показанных выше.Но тогда мне пришлось бы извлекать контент откуда-то еще (CMS или файл ресурсов).Я бы хотел, чтобы содержимое содержалось на странице просмотра.
Я также рассмотрел решение, предложенное Джеффри Палермо , но это означало бы множество дополнительных файлов, разбросанных по всему проекту.,Я хотел бы, чтобы текстовое содержимое любого представления было ограничено только одним файлом.
Разве я не хочу абстрагироваться от разметки?Или есть подход, подходящий для MVC, который я здесь пропускаю?В чем недостаток «греха» при использовании WebControl?