2009-11-06 89 views
1

我想根据登录用户的角色创建一个共享控件,用于生成标记。为了达到这个目的,我需要在Model类中调用一个方法。这是在ASP.NET MVC中做到这一点的正确方法,因为我听说我们应该严格区分模型和视图。 请帮忙。使用模型方法创建共享视图

回答

0

模型和视图应该分开,以便沟通的方向应该只在一个方向上进行。通常情况下,View将知道底层模型,但不是相反的方式。

这就是为什么ASP.NET MVC的概念是强类型查看其中视图可以强烈地绑定到特定类型的模型。

因此,我没有看到将视图耦合到Model类的成员有任何问题。

0

虽然可以通过助手扩展从您的模型中读取。这是需要创建大量的标记?如果是的话,我会质疑这是否是最佳方法?

你可以考虑使用“asp:loginview”并从这里渲染部分视图?不依赖viewstate的ASP.NET控件在MVC中正常工作。

例子:

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

在我看来,在视图应该不知道是什么角色应该看到。它是一个控制器功能。同样,Model不应该关注View如何使用它的信息。

所以,这里是我如何设计它。

视图询问信息。控制器应该知道用户是谁,他们应该看到什么。控制器要求模型为View提供正确的内容。

如果您可以设计系统,以便它可以显示自己没有模型或视图,那很好。

0

在MVC Futures中,您也有Html帮助器RenderAction,它允许您的视图进行调用和操作,然后在其自己的标记中呈现该操作的结果。

这对于做菜单等工作很有帮助,但这不是严格的MVC,但它非常实用。

但最好的使用方法将取决于你需要输出的HTML,你需要输出它和为什么。如果您可以告诉我们更多关于您需要呈现的Html以及它的用途,那我们可以给您一些更好的帮助。

但有一点是肯定的,模型不应该输出Html来渲染。