2012-04-16 8 views
1

他のすべてのコントローラが継承するApplicationController.csを作成しました。このControllerを使用してDBからユーザーのフルネームを取得しようとしていますが、layout.cshtmlでViewBag &のキャプチャに設定されています。MVC3 - layout.cshtmlのDBから情報を取得して埋め込みます

また、ユーザーのログインをキャプチャするGlobal.asaxでセッション変数を作成しました。私の問題は、Session変数がApplicationController.csのnullであることです。ただし、すべての子コントローラでセッション変数が正しく設定されています。ここに私のApplicationController.csのコードは次のとおりです。

public abstract class ApplicationController : Controller 
{ 
    private SkadPROEntities db = new SkadPROEntities(); 

    public SkadPROEntities SkadProDB 
    { 
     get { return db; }     
    } 


    public ApplicationController() 
    { 
     //string[] currentUserString = User.Identity.Name.Split('\\'); 
     //string myCurrentUser = currentUserString[1]; 
     //string myCurrentUser = Session["currentUser"].ToString(); 
     var empQuery = from employee in db.PRO_LSN_EMPLOYEE_OBJ 
         //where employee.LSN_Security_Nbr == Session["currentUser"].ToString() 
         where employee.LSN_Security_Nbr == "bhopkins" 
         select employee; 
     string firstName = ""; 
     foreach (var myEmployee in empQuery) 
     { 
      firstName = myEmployee.LSN_cf_First_Name; 
     } 
     ViewBag.FirstName = firstName; 
     ViewBag.EmpName = "Bill Test"; 
    } 
} 

はなぜApplicationController.csでのセッション変数のヌルですが、すべての子供たちコントローラに移入しますか?

答えて

1

コンストラクタでセッション変数にアクセスすることはできません。おそらく、コンストラクタではなく、子コンストラクタのアクション内でセッション変数にアクセスしようとしています。

を使用すると、レイアウトページにデータ情報を注入するという点で任意の勧告を持っていますかSession null in ASP.Net MVC Controller Constructors

+0

を参照してください?ベースコントローラーを通るのが一番良いと思ったが、セッション変数にアクセスする必要があった。 – user1336495

+0

@ user1336495ベースコントローラーは、レイアウトページデータを取得する場所だと思います。 "OnActionExecuting"メソッドをオーバーライドして、そこに取得できます。それは私がレイアウトでViewBagを使用するのが好きではないと言いました。私はレイアウトで "@ Html.Action"を呼び出すので、別のアクションでデータをフェッチすることができます。 – DMulligan