2009-04-24 75 views
1

我有一個名爲LogOnUserControl的局部視圖/用戶控件,它顯示在我的網站上的一個側欄(在Site.Master中定義)中。我也有一個單獨的LogOn視圖,它也呈現LogOnUserControl。ASP.NET MVC:如何呈現除一個視圖之外的所有視圖的局部視圖?

我不想在登錄鑑於LogOnUserControl的兩個實例,因爲它只是普通的混亂,所以我現在的想法是,包括在LogOnUserControl的條件,如

// Semi-pseudocode 
if (!Request.IsAuthenticated) && View.Name != "LogOn") 

這感覺不對,因爲局部視圖現在知道LogOn視圖。此外,我無法找到如何獲得視圖的名稱,這增強了我做錯事情的感覺! :-)

編輯:還有一個複雜的問題,就是LogOn視圖和Site.Master中的側欄都使用了相同的局部視圖。

回答

3

在母版頁包邊欄區域與內容區域的標籤內容,並給它像SideBarContentArea或東西的ID。它所做的是創建一個新的內容區域,您可以選擇在基於主服務器的頁面上覆蓋該區域,並指定當您未在子頁面中實施時顯示的默認內容。現在在登錄頁面上,你所要做的就是重寫SideBarContentArea,而不是這次包含登錄控件。

Bada Bing!

5

您是否考慮過使用不同的母版頁進行登錄?在側欄中查看沒有登錄的部分文件?如果您擔心重複的html標記,您可以使用嵌套的母版頁來避免該問題。

+1

+1。帶上您的母版頁,並用另一個ContentPlaceHolder將當前的調用替換爲LogOnUserControl。然後創建另外兩個母版頁,從「Site.master」嵌套的「Main.master」和「Logon.master」。 Main.master會將內容添加到新的ContentPlaceHolder,但Logon.master不會。問題解決了。 – Portman 2009-04-24 23:40:32

+0

我跟着波特曼的評論(+1的細節!:-),但我得到一個錯誤「無法找到ContentPlaceHolder'MainContent'在母版頁'/Views/Shared/LogOn.Master'」。我將LogOn視圖設置爲使用LogOn.master頁面。缺少的ContentPlaceHolder在Site.Master中,LogOn.Master嵌套於...我做錯了什麼? – alastairs 2009-04-25 21:30:28

2

你可以在ViewData中存儲一個標誌來表明這一點。無論您想強制輸入還是直接訪問,都取決於您。因此,您的主頁上,你可以有這樣的:

<% if (ViewData["HideLogOnUserControl"] == "Y") { %> 
    Insert HTML here 
<% } else { %> 
    Insert HTML here 
<% } %> 
相關問題