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