Я предпочитаю не использовать код позади класса в моих представлениях. Это не потому, что он нарушает MVC по умолчанию, а потому, что я обнаружил, что «естественный» способ (по крайней мере для меня) отличается.
Когда я сталкиваюсь со сложной HTML-разметкой, которая относится только к проблемам просмотра, я обычно пишу метод расширения для класса HtmlHelper
, чтобы скрыть сложность. Таким образом, у меня есть расширения, такие как Html.MoneyTextBox()
, Html.OptionGroup()
и Html.Pager<T>
.
В других случаях, когда возникают сложные условия, обычно я что-то пропускал из контроллера. Например, все проблемы, связанные с видимостью элементов, доступными только для чтения или включенным, обычно связаны с тем, что может предоставить контроллер. В этом случае вместо передачи модели в представление я создаю модель представления, которая инкапсулирует модель и дополнительную информацию, которую может предоставить контроллер, чтобы упростить разметку HTML. Типичным примером модели представления является следующий:
public class CustomerInfo
{
public Customer Customer { get; set; }
public bool IsEditable { get; set; } // e.g. based on current user/role
public bool NeedFullAddress { get; set; } // e.g. based on requested action
public bool IsEligibleForSomething { get; set; } // e.g. based on business rule
}
Тем не менее, код позади является частью представления, так что вы можете использовать его свободно, если он лучше соответствует вашим потребностям.