Я хочу создать общий элемент управления, в котором я хочу создать разметку в соответствии с ролью вошедшего в систему пользователя. Чтобы добиться этого, мне нужно вызвать метод в классе Model. Является ли это правильным способом сделать это в ASP.NET MVC, поскольку я слышал, что мы должны строго разделять модели и представления. Пожалуйста помоги.
Создание общего представления с использованием метода модели
Ответы (4)
На мой взгляд, Вид не должен знать, что должна видеть Роль. Это функция контроллера. Точно так же Модель не должна заботиться о том, как Представление использует свою информацию.
Итак, вот как я его проектирую.
Представление запрашивает информацию. Контроллер должен знать, кто пользователь и что он должен видеть. Контроллер запрашивает у модели правильное представление представления.
Было бы неплохо, если бы вы могли спроектировать систему так, чтобы она могла проявлять себя без Модели или Представления.
Модели и Представления должны быть разделены только в той степени, в которой направление коммуникации должно идти только в одном направлении. Как правило, Представление знает о лежащей в основе Модели, но не наоборот.
Вот почему в ASP.NET MVC используется концепция строго типизированного представления, где представления могут быть строго привязаны к определенному типу модели.
Таким образом, я не вижу никаких проблем с привязкой вашего View к члену класса Model.
Хотя можно читать из вашей модели через вспомогательное расширение. это необходимо для создания больших объемов разметки? если да, то я бы спросил, является ли это оптимальным подходом?
Вы могли бы рассмотреть возможность использования «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>
В MVC Futures у вас также есть помощник Html RenderAction, который позволяет вашему представлению вызывать и выполнять действия, а затем визуализирует результат этого действия в своей собственной разметке.
Это полезно для таких вещей, как меню и т. д., но это не строго MVC, но очень практично.
Но лучший метод для использования будет зависеть от html, который вам нужно вывести, где вам нужно его вывести и почему. Если бы вы могли рассказать нам немного больше о HTML-коде, который вам нужно отобразить, и о его назначении, это было бы хорошо, и мы могли бы помочь вам лучше.
Но одно можно сказать наверняка: модели не должны выводить HTML для рендеринга.