2012-09-25 24 views
-1

我們使用MVC 3構建了一個包含動態菜單選項的網站,以便用戶只能看到菜單選項(操作鏈接),根據組和個人權限可以查看它們。MVC 3向局部視圖添加動態鏈接

如何在運行時添加動態菜單選項(鏈接到部分視圖)? 我們是否使用可見性選項來硬編碼所有部分視圖的所有鏈接,以及不需要的鏈接的轉向? 我們可以從數據庫中動態添加鏈接嗎?

讓我澄清。 我們有管理員可以訪問所有菜單選項,如管理用戶,管理組,管理供應商,管理產品和管理訂單。 我們有定期的銷售人員只需要管理供應商和管理訂單。 因此,我們只需要顯示說明管理訂單和管理供應商的鏈接。因此,它們是我嘗試建立的鏈接的動態性質。 我們擁有在數據庫中設置的權限。

Jawahar

回答

0

我發現這樣做使用方法擴展與IPrincipal的

public static bool IsAllowed(this IPrincipal p, string menuid) { 
if (p.Identity.IsAuthenticated) { 
     //Code here to verify privillegs against Database 
    } 
    return false; 
} 

This would keep it fairly neat in you Layout.cshtml. 

@if (User.IsAllowed("menuchoice1")) { 
     <a href="@Url.Action(...)">...</a> 
} 
@if (User.IsAllowed("menuchoice2")) { 
     <a href="@Url.Action(...)>...</a> 
} 

希望這有助於其他人尋找類似的選項

+0

我不確定我在跟着...你還在做我上面提到的建議。你只是在視圖中使用@if語句。除非我完全誤解了它,否則你從if語句中調用的內容與你的原始問題並不真正相關。 –

+0

是的,你是正確的蒂姆。 我們的Html.Actionlinks是硬編碼的,我想讓它們可見= false,如果用戶不被允許訪問鏈接。 因此,我首先檢查它們是否經過身份驗證(IPrincipal),然後檢查數據庫的訪問規則是否返回false,如果它們不允許訪問鏈接。 (快速和骯髒的方法) 我最初正在尋找一種在運行時添加Html.ActionLinks的動態方法,而不是對它們進行硬編碼。 – Jawahar

0

我不知道我完全明白你的意思,當你說「鏈接的部分意見」。你從來沒有超鏈接到局部視圖。我可以想到的兩種可能性是要麼知道如何有條件地嵌入局部視圖,要麼想要超鏈接到返回局部視圖的控制器動作。

在第一種情況下,您可以將@ Html.RenderPartial調用放入@if(myCondition == true)塊中。這樣,只有當條件通過時纔會顯示局部視圖。

在第二種情況下,您可以始終調用控制器操作。在您的控制器中,如果條件匹配,只返回PartialView。否則,返回null。

+0

的方式這是我想要的目的。我們有管理員可以訪問所有菜單選項,如管理用戶,管理組,管理供應商,管理產品和管理訂單。我們有定期的銷售人員只需要管理供應商和管理訂單。所以基於此,我們只需要顯示說明管理訂單和管理供應商的鏈接。因此,它們是我嘗試建立的鏈接的動態性質。 – Jawahar

+0

您可以使用上述任一選項來完成該要求。將您的部分視圖置於主視圖中的@if語句中,或者使用有條件地返回分部視圖的控制器方法。 –