Когда я смотрю на MVC-представление, которое я написал, все это похоже на тег spaghetti для меня, особенно с цветовой схемой по умолчанию VS 2008. Это все <%
желтые теги %>
везде. Очень сложно отличить код сервера и клиента.WebForms вид двигателя выглядит уродливым, любым способом его украсить?
В классическом ASP это было не так уж плохо, потому что обычно серверные блоки кода не были чередованием, как легкие MVC-представления. Они были большими кусками, что легко различимо. Теперь происходит чередование 1: 1 между клиентским и серверным кодом (например, один клиент линии, один сервер строк). Я нахожусь на грани нападения эпилепсии, когда я пытаюсь понять, что такое представление.
Если бы я мог по крайней мере иметь отдельный цвет фона для серверного кода, я думаю, что это поможет. Однако VS2008 не позволяет.
Я удалил желтый цвет фона с <%
/%>
тегов, теперь он выглядит лучше, по крайней мере, исправил подергивание в моем глазу, но по-прежнему трудно отслеживать поток представления.
Я также хорошо с альтернативной точки зрения двигателей, чтобы исправить эту проблему, но я не знаю, есть ли что дает некоторые предметы роскоши WebForms':
- подсветка синтаксиса для серверного кода
- Intellisense
- Составитель
Я смотрел на view engines listed in SO, в частности Spark, но мне не понравилось, как он переплетается с HTML кодом. Я думаю, что эта проблема еще хуже.
Вот пример кода, который мне не нравится:
<%@ Page Title="" Language="C#"
MasterPageFile="~/Views/Shared/site.master"
Inherits="System.Web.Mvc.ViewPage<SomeModel>" %>
<%@ Import Namespace="SomeHelpers" %>
<asp:Content ID="Content1" ContentPlaceHolderID="body" runat="server">
<h1><%= Html.Encode(Model.Title) %></h1><br /><br />
<% if (Model.Found) { %>
<% foreach (var item in Model.List) { %>
<div class="item">
<%= item.ProductID %> - <%= Html.SomeHelper(item.Description, 32000) %>
<div class="itemsub">(<%= Html.SomeOtherHelper(item.Customer) %>,
<%= Tools.AnotherHelper(item.OrderDate, item.ShipDate) %>)</div>
</div>
<% } %>
<% } else { %>
Item Not Found <br />
<% if (Model.Items.Count > 0) { %>
Some Text Here<br />
<ul>
<% foreach(var i in Model.Items) { %>
<li><%= Html.SomeHelper(i) %></li>
<% } %>
</ul>
<% } %>
<% } %>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="title" runat="server">
<%= Html.Encode(Model.Title) %> - Badass Web Site
</asp:Content>
После вставки кода я заметил, что SO делает лучшую работу в освещении сервера/клиентского кода правильно :) Я не подумайте, что этот вид подсветки возможен в VS2008, хотя (вам нужно будет полностью изменить выделение C#, которое я бы не хотел).
Спасибо! О ваших моментах: 1) Не посмотрел на RenderPartial, проверит это. Я думаю, что есть накладные расходы на поддержание слишком большого количества файлов там на уровне детализации. 2) Перемещение HTML на C# код просто перемещает проблему там, не исправляет ее. В статье Роба используется аналогичный подход. 3) Используйте другое представление, потому что не найденный случай - хороший совет, спасибо! Надеюсь, что ответы продолжатся. Похоже, я здесь не единственный :) –
Повторяя ваш ответ @jfar, ваши очки сегодня имеют больше смысла. Я, по-видимому, неправильно понял вашу вторую рекомендацию, которая фактически удаляет слишком много издержек из представления и делает ее более читаемой. Еще раз спасибо. –