2009-11-06 88 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來渲染。