Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 确定共享布局上的安全性_Asp.net Mvc_Asp.net Mvc 3_Security_Layout - Fatal编程技术网

Asp.net mvc 确定共享布局上的安全性

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.

在我的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");
}
呈现此操作的部分视图:

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
)来实现显示或不显示的内容

其优点是,根据经过身份验证的用户,只有一个操作返回导航栏,在使用其他控制器及其操作时,您不必担心这些问题