2017-11-02 7 views
0

私の質問が十分に説明できない場合はお詫び申し上げます。私は、複数の企業アカウントを持つMVCアプリケーションを持っています。だから私は会社のユーザーがいて、私は顧客のユーザーがいます。顧客は、どの会社と取引をしたいのか、ログインしたいのかを決めることができます。まず、company1との取引をしてから、ログアウトしてログインしてcompany2と取引します。Asp.Net MVC複数のリクエスト(スレッド)を処理できるグローバル情報を格納する方法

私は_Layout.cshtmlページを持っています。そのページには、顧客のユーザーがログインした会社に従ってページをカスタマイズできるようにしたいと考えています。最初はグローバルな静的変数を作成しましたが、user1がcompany1にログインした後、user2がcompany2にログインするとuser1に表示される情報が変更され、突然company2が表示されるため動作しません。

私のレイアウトページでは、たとえば会社名などを表示したいと思います。

namespace Hylton 
{ 
    public class G 
    { 
     public static string OrgName 
     { 
      get; 
      set; 
     } 

     public static int OrgId 
     { 
      get; 
      set; 
     } 

     public static string OrgEmail 
     { 
      get; 
      set; 
     } 
    } 
} 

そして、私の_Layout.cshtmlに、私はこのようなものだった:私はこのクラスを作成した最初の何をしたかを示すために

<li class="hi-logo"> 
    <a href="~/" class="m-l-10"> 
     @G.OrgName 
    </a> 
</li> 

することで見上げることなくこれを行うには良い方法はあります毎回データベース?

+0

なぜ静的ですか?なぜ普通のプロパティはありませんか? –

+0

これで最善の方法は何でしょうか? BaseViewModelを使用して、すべてのビューモデルがベースコントローラーで使用されます。 – joks

+0

BaseViewModelを使用できます。または、ビューデータまたはビューバックに会社名を渡すこともできます。 –

答えて

0

達成しようとしているのは、特定のユーザーに対してSessionStateです。認証メカニズムによっては、これをMVCの実際のセッションに格納することができます。ユーザがログインした後、コントローラでの操作を行います。

this.Session["CompanyName"] = "Shoes";

は、次に、あなたのビューのレンダリングでこれを抽出することができます。

public ViewResult Whatever() 
{ 
    var g = new G{OrgName = this.Session["CompanyName"]}; 
    return this.View(g); 
} 

別のオプションは、クッキーや認証トークンでこれを保管することです。

アイデアは同じですが、ユーザーがログインし、ブラウザー(および場合によってはサーバー)が、この会社の特定の情報を保持しています。

関連する問題