在我的ASP MVC 3网站中,我需要一种方法来确定共享布局页面上的用户安全性。此布局页面包含一个导航栏,需要根据用户的安全级别显示下拉项。
最初我以为我可以进行Ajax调用并填充ViewBag项目,然后使用它来确定要显示/不显示的内容。但是,除非我想在每个控制器/方法中使用相同的方法,否则这将不起作用。
鉴于此设置(位于共享布局上的导航栏),当用户在不同的控制器/方法中导航时,确定要显示哪些项目的最佳方法是什么?
答案 0 :(得分:1)
你可以采取两种方式解决这个问题。
您可以在视图中进行检查:
@if (User.Identity.IsAuthenticated){
// show logged in view
}
else{
// show logged out view
}
或者您可以构建一个ViewModel并从共享操作中填充它。
示例:
<强>视图模型强>
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);
}
}
呈现此操作的部分视图:
@Model VM
<p>
@model.Text
</p>
最后在您看来:
@{
Html.RenderAction("Shared", "Shared");
}
答案 1 :(得分:1)
您可以将导航栏实现为PartialView
,由ChildAction
返回,并使用对ChildAction
(@Html.Action(...)
)的调用插入到布局中。
在ChildAction
中,您可以根据登录用户(User.Identity
)实施或不显示内容。
优点是只有一个操作可以返回导航栏,具体取决于经过身份验证的用户,在使用其他控制器及其操作时,您不必担心这些操作。