0

私の ASP MVC 3 Web サイトでは、共有レイアウト ページでユーザー セキュリティを判断する方法が必要です。このレイアウト ページには、ユーザーのセキュリティ レベルに基づいてドロップダウン項目を表示する必要があるナビゲーション バーが含まれています。

当初、私は Ajax 呼び出しを行って ViewBag アイテムを設定し、それを使用して表示するものと表示しないものを決定できると考えていました。ただし、すべてのコントローラー/メソッドに同じメソッドを配置しない限り、これは機能しません。

この設定 (共有レイアウトに配置されたナビゲーション バー) を考えると、ユーザーがさまざまなコントローラー/メソッド間を移動するときに表示するアイテムを決定するための最良の方法は何ですか?

4

2 に答える 2

1

これについては 2 つの方法があります。

ビューでチェックを行うことができます:

@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によって返され、 ( )ChildActionへの呼び出しを使用してレイアウトに挿入されるとしてナビゲーション バーを実装できます。ChildAction@Html.Action(...)

内でChildAction、ログインしたユーザーに応じて何を表示するか、または何を表示しないかを実装します ( User.Identity)。

利点は、認証されたユーザーに応じて navbar を返す単一のアクションしかないことです。他のコントローラーとそのアクションを操作するときに、これについて心配する必要はありません。

于 2013-05-13T17:54:41.840 に答える