在我的 ASP MVC 3 网站中,我需要一种方法来确定共享布局页面上的用户安全性。此布局页面包含一个导航栏,该导航栏需要根据用户的安全级别显示下拉项目。
最初我以为我可以进行 Ajax 调用并填充 ViewBag 项目,然后使用它来确定显示/不显示的内容。但是,除非我想在每个控制器/方法中使用相同的方法,否则这将不起作用。
鉴于这种设置(导航栏位于共享布局上),当用户在不同的控制器/方法之间导航时,确定要显示哪些项目的最佳方法是什么?
在我的 ASP MVC 3 网站中,我需要一种方法来确定共享布局页面上的用户安全性。此布局页面包含一个导航栏,该导航栏需要根据用户的安全级别显示下拉项目。
最初我以为我可以进行 Ajax 调用并填充 ViewBag 项目,然后使用它来确定显示/不显示的内容。但是,除非我想在每个控制器/方法中使用相同的方法,否则这将不起作用。
鉴于这种设置(导航栏位于共享布局上),当用户在不同的控制器/方法之间导航时,确定要显示哪些项目的最佳方法是什么?
你可以采取两种方式来解决这个问题。
您可以在视图中进行检查:
@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");
}
您可以将导航栏实现PartialView
为由 a 返回的 a ,并使用对( )ChildAction
的调用插入到布局中。ChildAction
@Html.Action(...)
在 中ChildAction
,您可以根据登录用户 ( User.Identity
) 来实现显示或不显示的内容。
优点是只有一个操作会根据经过身份验证的用户返回导航栏,并且在使用其他控制器及其操作时不必担心这些。