asp.net mvc отображает различный контент в зависимости от состояния - PullRequest
0 голосов
/ 06 мая 2011

У меня есть 2 разных типа данных для отображения (например, пользователи и продукты).В зависимости от состояния мне нужно отобразить пользователей или продукты.Я слышал, что лучшие практики говорят о том, что нам нужно вводить метод расширения всякий раз, когда мы хотим добавить if в View.Но HTML пользователя и продукта кажется слишком сложным, чтобы жестко закодировать его в метод расширения.Есть ли лучшая практика для решения этой проблемы?

Ответы [ 3 ]

0 голосов
/ 06 мая 2011

Использование if stmt на самом деле не спагетти, так как вы не переходите между кодами. Это также довольно читабельно. Используя метод расширения в этом случае, вы не будете жестко программировать любой html, а просто снова перенаправляете на конкретное действие для возврата, поэтому вопрос заключается либо в том, чтобы иметь тот же код в вашем представлении, либо в логике для представления, обрабатываемого в вашем расширении. метод.

0 голосов
/ 07 мая 2011

Я решил использовать это решение (# 18 html-расширений помощника).Сочетает это с этим методом расширения.Это позволит писать такие вещи как html.RenderMyPageData (Model);Если бы был инкапсулирован внутри метода.И он не будет генерировать HTML с помощью строителя строк, но будет использовать готовые к работе частичные представления.

0 голосов
/ 06 мая 2011

Полагаю, проблема с if s в представлении заключается в том, что это может привести к бизнес-логике (которой нет места на уровне представления).

Ваше использование if связано исключительно с презентацией? Тогда используйте это в представлении.

Реализует ли if некоторую бизнес-логику? Пересмотрите свой дизайн.

Если вы по-прежнему пользуетесь if в представлении (и не знаете больше о своем проекте), я не уверен, почему вам нужно использовать метод расширения. Я не вижу проблем с чем-то похожим на:

<%
    if (someCondition)
    {   
        Html.RenderAction("User", "Index");
    } 
    else
    {   
        Html.RenderAction("Product", "Index");
    }    
%>
...