在我的ASP MVC 3網站中,我需要一種方法來確定共享佈局頁面上的用戶安全性。此佈局頁面包含一個導航欄,需要根據用戶的安全級別顯示下拉項目。確定共享佈局的安全
最初我以爲我可以做一個Ajax調用並填充一個ViewBag項目,然後用它來確定顯示/不顯示。但是,除非我想在每個控制器/方法中使用相同的方法,否則這將不起作用。
鑑於此設置(導航欄位於共享佈局),當用戶在不同的控制器/方法間導航時,確定顯示哪些項目的最佳方法是什麼?
在我的ASP MVC 3網站中,我需要一種方法來確定共享佈局頁面上的用戶安全性。此佈局頁面包含一個導航欄,需要根據用戶的安全級別顯示下拉項目。確定共享佈局的安全
最初我以爲我可以做一個Ajax調用並填充一個ViewBag項目,然後用它來確定顯示/不顯示。但是,除非我想在每個控制器/方法中使用相同的方法,否則這將不起作用。
鑑於此設置(導航欄位於共享佈局),當用戶在不同的控制器/方法間導航時,確定顯示哪些項目的最佳方法是什麼?
你可以用兩種方法解決這個問題。
你可以做視圖中的檢查:
@if (User.Identity.IsAuthenticated){
// show logged in view
}
else{
// show logged out view
}
或者你可以建立一個視圖模型並填充,從一個共同行動。
實施例:
視圖模型
public class VM
{
public string Text{get; set;}
}
共同行動上共享控制器:
public class SharedController{
public PartialViewResult GetMenu(){
VM newvm = new VM(Text = "not logged in");
if (User.Identity.IsAuthenticated){
newvm.Text = "logged in";
}
return PartialView("Shared", newvm);
}
}
甲partialview呈現此動作:
@Model VM
<p>
@model.Text
</p>
並且最後在你看來:
@{
Html.RenderAction("Shared", "Shared");
}
您可以實現您的導航欄作爲由ChildAction
使用到ChildAction
(@Html.Action(...)
)的調用返回並插入到佈局的PartialView
。
在ChildAction
內,根據登錄的用戶(User.Identity
)實施要顯示或不顯示的內容。
優點是隻有一個動作可以根據經過驗證的用戶返回導航欄,並且在使用其他控制器及其動作時不必擔心這些。