2012-04-28 5 views
0

SPA MVC4に新しい、して、ユーザーを識別するために、アカウントのコントローラからLinqToEntitiesDataControllerにセッション変数を渡すしようとしている:私が使用しようとしていますLinqToEntitiesDataControllerでLinqToEntitiesDataController MVC 4単一ページのアプリケーション - セッション変数

     using (DALEntities db = new DALEntities()) 
         { 
          string PHN = (from p in db.Patients 
              where p.UserName == model.UserName 
              select p.PHN).First(); 
          Session["P"] = PHN; 
         } 

変数は次のように:

The name 'Session' does not exist in the current context 

public partial class DALController : LinqToEntitiesDataController<MyVDC.Models.DALEntities> 
    { 
     public IQueryable<MyVDC.Models.TestModel> GetTestModel() 
     { 
      **string phn = (string)Session["P"];** 
      return ObjectContext.TestModels.Where(b => b.PHN == phn).OrderBy(b => b.ID); 

     } 
} 

私はこのエラーを取得します

これが唯一の方法ですか、このコントローラでセッション変数を使用する方が良い方法がありますか?

私はまた、アカウントのコントローラで使用しようとした:

HttpContext.Current.Session["P"] = PHN; 

をしかし、私はこのエラーを取得する:事前に

'System.Web.HttpContextBase' does not contain a definition for 'Current' and no extension method 'Current' accepting a first argument of type 'System.Web.HttpContextBase' could be found 

感謝を。

答えて

0
public class SessionHttpControllerRouteHandler : HttpControllerRouteHandler 
{ 
    protected override IHttpHandler GetHttpHandler(System.Web.Routing.RequestContext requestContext) 
    { 
     return new SessionHttpControllerHandler(requestContext.RouteData); 
    } 
} 

public class SessionHttpControllerHandler : HttpControllerHandler, IRequiresSessionState 
{ 
    public SessionHttpControllerHandler(RouteData routeData) : base(routeData) { } 
} 

セッションを作成してHttpControllerHandlerを作成し、このクラスをGlobal.asaxにルーティングします。

routes.Add("SessionApis", 
     new HttpWebRoute(
      url: "api/{controller}/{id}", 
      defaults: new RouteValueDictionary(new {id = RouteParameter.Optional}), 
      routeHandler: new SessionHttpControllerRouteHandler() 
    )); 

しかし、私はApiControllerがセッションレスで使うことをお勧めします。スケーラビリティとRESTの原則。

LinqToEntitiesDataControllerカスタム領域登録クラス(DALRouteRegistrationクラス?)でルートを追加します。 スキャフォールディングのデフォルト領域レジスタコードを変更します。

この程度
RouteTable.Routes.Add("SessionDALApis", 
     new HttpWebRoute(
      url: "api/DAL/{action}", 
      defaults: new RouteValueDictionary(new { controller = "DAL" }), 
      routeHandler: new SessionHttpControllerRouteHandler() 
    )); 

どのように

RouteTable.Routes.MapHttpRoute(
     "DAL", // Route name 
     "api/DAL/{action}", // URL with parameters 
     new { controller = "DAL" } // Parameter defaults 
    ); 

から

+0

パーシャルクラスのため、変数をLinqコントローラに渡すことができません – hncl

+0

もう一度おねがいしますが、私はまだ文字列phn = HttpContext.Current.Session ["PHN"]を使ってセッション変数を取得できません.ToString();それはまだnullです – hncl

+0

Hummmm.Iしました...どうですか?web.configのsessionStateはどうですか? – takepara

関連する問題