0

在我的 ASP MVC 3 网站中,我需要一种方法来确定共享布局页面上的用户安全性。此布局页面包含一个导航栏,该导航栏需要根据用户的安全级别显示下拉项目。

最初我以为我可以进行 Ajax 调用并填充 ViewBag 项目,然后使用它来确定显示/不显示的内容。但是,除非我想在每个控制器/方法中使用相同的方法,否则这将不起作用。

鉴于这种设置(导航栏位于共享布局上),当用户在不同的控制器/方法之间导航时,确定要显示哪些项目的最佳方法是什么?

4

2 回答 2

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");
}
于 2013-05-13T17:51:47.123 回答
1

您可以将导航栏实现PartialView为由 a 返回的 a ,并使用对( )ChildAction的调用插入到布局中。ChildAction@Html.Action(...)

在 中ChildAction,您可以根据登录用户 ( User.Identity) 来实现显示或不显示的内容。

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

于 2013-05-13T17:54:41.840 回答