Я наслаждаюсь Asp.Net MVC и собираюсь использовать его в будущем проекте. Часть проекта, однако, делает акцент на возможности представления представлений проекта дизайнерам для таких вещей, как тематика и так далее. Одна проблема, которую я ожидаю, заключается в том, что представления Asp.Net MVC скорее ориентированы на разработчиков. Я действительно не хочу обучать дизайнеров внутренностям <% vs. <% =, не говоря уже о чем-то вроде <% foreach ... </p>
Возьмем типичную структуру меню MVC, например.
<div id="menu">
<ul>
<li><%= Html.ActionLink("Home", "Index", "Main")%></li>
<li><%= Html.ActionLink("About", "About", "Main")%></li>
<li><% Html.RenderPartial("LogOnUserControl"); %></li>
</ul>
</div>
Я бы предпочел сказать дизайнерам что-то вроде
<div id="menu">
<ul>
<li>{ActionLink "Home", "Index", "Main"}</li>
<li>{ActionLink "About", "About", "Main"}</li>
<li>{Partial "LogOnUserControl"}</li>
</ul>
</div>
Или
<div id="menu">
<ul>
<li><my:ActionLink text="Home" action="Index" controller="Main" /></li>
<li><my:ActionLink text="About" action="About" controller="Main" /></li>
<li><my:Partial name="LogOnUserControl" /></li>
</ul>
</div>
Да, последний выглядит подозрительно, как куча UserControls. Лично я не являюсь поклонником фактического использования UserControls для этого хотя бы потому, что рендеринг этих элементов управления происходит после почти всего остального (насколько я понимаю), и я бы предпочел что-то, что больше соответствует жизненному циклу MVC , Все, что мне действительно нужно, это набор заполнителей и способ заменить их соответствующим рендерингом.
Так, где лучшее место для этого и какие компромиссы я смотрю здесь. Я могу представить себе пару углов на это:
- Пользовательский класс ViewPage, в котором я могу переопределить что-то важное. ViewPage.RenderView или ViewPage.FrameworkInitialize, возможно, но как вы узнаете текст, я не знаю.
- Создайте пользовательский TextWriter и переопределите ViewPage.CreateHtmlTextWriter, чтобы я мог затем перехватить текстовый вывод для замены материала. Это довольно поздно в цикле, и, если я не буду осторожен, он испортит другие пользовательские фильтры.
- Создание моих собственных классов IView и ViewEngine. Я не продвинулся далеко по этому пути, прежде чем подумать, направляюсь ли я в очень плохое место.
- Пользовательские пользовательские элементы управления, которые могут имитировать необходимые функции.
Мнения? Другие опции? Мой собственный ViewEngine мой лучший вариант? Мой собственный ViewPage? Или объекты UserControl будут адекватными (пожалуйста, скажите нет)?