0

したがって、最初のユーザーログイン時に設定されるSession変数があります

Session["ClientID"]

基本的に、これはテーマ設定に使用されます(したがって、ClientIDはテーマ/ブランドをWebサイトに表示するように設定します)。適用するコードを見る

(Guid)Session["ClientID"] 

いたるところに汚れがあり、エラーが発生しやすいように見えます。変数をグローバルに認識させるために使用するのに最適なデザインパターンです。だから私はできる

this.CurrentClientID

またはすべてのMVCページで同様のもの。理論的にはController、このIDを提供するCustomクラスでクラスをオーバーロードできますが、これをビューに公開する方法もわかりません。

最善の解決策へのポインタはありがたいことに受け取られます!

4

1 に答える 1

2

グローバルに何を意味するのかわかりませんが、ControllerBaseクラスの拡張メソッドを使用すると、すべてのコントローラーでアクセスできるようになります。

public static class ControllerExtensions
{
    public static Guid GetCurrentClientID(this ControllerBase controller)
    {
        return (Guid)controller.ControllerContext.HttpContext.Session["ClientID"];
    }
}

これで、各コントローラー内でアクセスできます。

public ActionResult Foo()
{
    Guid id = this.GetCurrentClientID();
    ...
}

さらにグローバルに利用できるようにしたい場合は、HttpContextBaseクラスの拡張メソッドにします。

public static class ControllerExtensions
{
    public static Guid GetCurrentClientID(this HttpContextBase context)
    {
        return (Guid)context.Session["ClientID"];
    }
}

これで、HttpContext(ASP.NETアプリケーションのほとんどすべての場所)にアクセスできるすべての場所で、拡張メソッドを使用するだけです。たとえば、ビュー内:

@Html.ActionLink("foo link", "foo", new { clientid = Context.GetCurrentClientID() })
于 2012-07-02T16:04:37.063 に答える