Логика ветвления в виде MVC - PullRequest
5 голосов
/ 26 мая 2010

В моих представлениях я пишу много кода, который выглядит как приведенный ниже код. В этом случае я хочу добавить пояснительный HTML для новичка и другой HTML для опытного пользователя.

<% if (ViewData["novice"] != null ) { %>
some extra  HTML for a novice
<% } else { %>
some HTML for an expert
<% } %>

Это логика представления, поэтому имеет смысл, что она находится в представлении против контроллера. Тем не менее, это становится ужасно быстро, особенно когда ReSharper хочет переместить все фигурные скобки, чтобы сделать его еще хуже (есть ли способ отключить это для представлений?)

Мой вопрос: правильно ли это, или я должен перейти в контроллере к двум отдельным представлениям? Если я сделаю два просмотра, у меня будет много дублированного HTML для поддержки.

Или я должен сделать два отдельных представления с общим частичным представлением общего материала?

Ответы [ 2 ]

2 голосов
/ 26 мая 2010

В идеале, такая логика должна обрабатываться в модели представления, и представление должно просто отображать модель.

Так что у вас может быть что-то вроде:

<%= ViewData["helptext"]  %>

и ваша логика в контроллере будет выглядеть примерно так:

ViewData["helpText"] = isNovice ? noviceText : expertText;

таким образом вы можете перенести эту логику обратно в контроллер и сохранить ваши взгляды красивыми и чистыми

1 голос
/ 26 мая 2010

Вы пытаетесь создать 2 совершенно отдельные html-страницы с одинаковыми моделями. Вы хотите отдельный вид. Не пытайтесь использовать шаблон проектирования с помощью логики условного ветвления.

HTML-помощники здесь не сильно вам помогут, так как, похоже, вы не будете повторять много логики, кроме как в противном случае.

...