我想创建一个共享控件,我想根据登录用户的角色生成标记。要实现这一点,我需要在Model类中调用一个方法。这是在ASP.NET MVC中执行此操作的正确方法,因为我听说我们应该严格区分模型和视图。 请帮忙。
答案 0 :(得分:1)
在我看来,View不应该知道角色应该看到什么。它是一个控制器功能。同样,Model不应该关注View如何使用其信息。
所以,这就是我设计它的方式。
视图要求提供信息。控制器应该知道用户是谁,以及他们应该看到什么。控制器要求Model向View提供正确的内容。
如果您可以设计系统以便它可以在没有模型或视图的情况下显示自己,那就太好了。
答案 1 :(得分:0)
模型和视图只应分开,以便通信方向只能在一个方向上进行。通常,View会知道底层模型,但不会反过来。
这就是为什么ASP.NET MVC具有强类型视图的概念,其中视图可以强烈绑定到特定类型的模型。
因此,我认为将View与Model类的成员耦合没有任何问题。
答案 2 :(得分:0)
虽然通过帮助扩展程序从您的模型中读取是好的。是否需要创建大量标记?如果是这样我会质疑这是否是最佳方法?
您可以考虑使用“asp:loginview”并从此处渲染部分视图吗? ASP.NET控件不依赖于viewstate在MVC中正常工作。
示例:
<asp:LoginView id="LoginView1" runat="server">
<RoleGroups>
<asp:RoleGroup Roles="Admin">
<ContentTemplate>
<%= Html.RenderPartial("MyPartial"); %>
</ContentTemplate>
</asp:RoleGroup>
</RoleGroups>
</asp:LoginView>
答案 3 :(得分:0)
在MVC Futures中,您还拥有Html助手RenderAction,它允许您的视图进行调用和操作,然后将该操作的结果呈现在自己的标记中。
这对于菜单等操作很有帮助,但这不是严格意义上的MVC,但它非常实用。
但最好的使用方法取决于你需要输出的html,你需要输出它的原因以及原因。如果你能告诉我们更多关于你需要渲染的Html以及它的目的那么好,我们可以给你一些更好的帮助。
但有一件事是肯定的,模特不应该输出Html来渲染。