我想创建一个共享控件,我想根据登录用户的角色在其中生成标记。为此,我需要在 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 来渲染。