Создание общего представления с использованием метода модели

Я хочу создать общий элемент управления, в котором я хочу создать разметку в соответствии с ролью вошедшего в систему пользователя. Чтобы добиться этого, мне нужно вызвать метод в классе Model. Является ли это правильным способом сделать это в ASP.NET MVC, поскольку я слышал, что мы должны строго разделять модели и представления. Пожалуйста помоги.


person munna    schedule 06.11.2009    source источник


Ответы (4)


На мой взгляд, Вид не должен знать, что должна видеть Роль. Это функция контроллера. Точно так же Модель не должна заботиться о том, как Представление использует свою информацию.

Итак, вот как я его проектирую.

Представление запрашивает информацию. Контроллер должен знать, кто пользователь и что он должен видеть. Контроллер запрашивает у модели правильное представление представления.

Было бы неплохо, если бы вы могли спроектировать систему так, чтобы она могла проявлять себя без Модели или Представления.

person srini.venigalla    schedule 06.11.2009

Модели и Представления должны быть разделены только в той степени, в которой направление коммуникации должно идти только в одном направлении. Как правило, Представление знает о лежащей в основе Модели, но не наоборот.

Вот почему в ASP.NET MVC используется концепция строго типизированного представления, где представления могут быть строго привязаны к определенному типу модели.

Таким образом, я не вижу никаких проблем с привязкой вашего View к члену класса Model.

person Mark Seemann    schedule 06.11.2009

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

Вы могли бы рассмотреть возможность использования «asp: loginview» и отображать частичные представления отсюда? Элементы управления ASP.NET, которые не зависят от состояния представления, отлично работают в MVC.

Пример:

<asp:LoginView id="LoginView1" runat="server">
                <RoleGroups>
                    <asp:RoleGroup Roles="Admin">
                        <ContentTemplate>
                            <%= Html.RenderPartial("MyPartial"); %>
                        </ContentTemplate>
                    </asp:RoleGroup>
                </RoleGroups>
            </asp:LoginView>
person Mark    schedule 06.11.2009

В MVC Futures у вас также есть помощник Html RenderAction, который позволяет вашему представлению вызывать и выполнять действия, а затем визуализирует результат этого действия в своей собственной разметке.

Это полезно для таких вещей, как меню и т. д., но это не строго MVC, но очень практично.

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

Но одно можно сказать наверняка: модели не должны выводить HTML для рендеринга.

person Andy Long    schedule 06.11.2009