2015-06-09 83 views
1

強類型會話對象根據各種來源網上,我應該用這個MVC引用我的觀點

public static class SessionExtensions 
    { 
     /// <summary> 
     /// Get value. 
     /// </summary> 
     /// <typeparam name="T"></typeparam> 
     /// <param name="session"></param> 
     /// <param name="key"></param> 
     /// <returns></returns> 
     public static T GetDataFromSession<T>(this HttpSessionStateBase session, string key) 
     { 
      return (T)session[key]; 
     } 

     /// <summary> 
     /// Set value. 
     /// </summary> 
     /// <param name="session"></param> 
     /// <param name="key"></param> 
     /// <param name="value"></param> 
     public static void SetDataToSession(this HttpSessionStateBase session, string key, object value) 
     { 
      session[key] = value; 
     } 
    } 

要使用會話對象的MVC。 我已經做了以下BaseController

public class BaseController : Controller 
    { 
     public int UserID 
     { 
      get { return Session.GetDataFromSession<int>("UserID"); } 
      set { Session.SetDataToSession("UserID", value); } 
     } 
} 

我現在繼承BaseController

public class RequestsController : BaseController 
    { 
     private FooModel db = new FooModel(); 

     // GET: Requests 
     public ActionResult Index() 
     { 
      var viewModel = Mapper.RequestIndex(UserID); 
      return View(viewModel); 
     } 
} 

,我可以使用用戶名會話對象沒有問題。

如何在我的視圖中使用相同的會話對象,而無需將其添加到模型中。

<div class="clearfix"> 
       @if (Session["UserID"].ToString() == "1") 
       { 
     <div class="btn btn-default pull-right "> 
      @Html.ActionLink("Super Special link for User 1", "sslfu1") 
     </div> 
       } 
    </div> 

Session["UserID"]在這裏不正確。我應該使用什麼?

+0

「不正確」是什麼意思?你是否交叉檢查Session是否被設置? – ramiramilu

回答

0

我已經修改了我的SessionExtensions類包括以下內容:

public static T GetDataFromSession<T>(this HttpSessionStateBase session, string key) 
     { 
      return (T)session[key]; 
     } 

然後在視圖中引用它像這樣:@Session.GetDataFromSession("UserID")

這是不是強類型的,但是這更符合自然

1

你有多種方法可以做到這一點,一個簡單的方法就是利用ViewBag

public ActionResult Index() 
{ 
    var viewModel = Mapper.RequestIndex(UserID); 
    ViewBag.UserID = UserID; 
    return View(viewModel); 
} 

在視圖中,您可以像這樣使用它。

<div class="clearfix"> 
    @if (ViewBag.UserID == 1) 
    { 
     <div class="btn btn-default pull-right "> 
      @Html.ActionLink("Super Special link for User 1", "sslfu1") 
     </div> 
    } 
</div> 
+0

這種方法的缺點是我需要將它添加到視圖包中,我想避免這種情況。 –

+0

@Stingervz你可以使用我的第二種方法,我使用擴展方法從'Session'中獲取'UserID'。讓我更新。 – adricadar

1

我要使它強類型,你可以使用擴展方法來像爲獲得UserID的包裝。

public static int UserID(this HttpSessionStateBase session) 
{ 
    return session.GetDataFromSession<int>("UserID"); 
} 

在查看

<div class="clearfix"> 
    @if (Session.UserID() == 1) 
    { 
     <div class="btn btn-default pull-right "> 
      @Html.ActionLink("Super Special link for User 1", "sslfu1") 
     </div> 
    } 
</div>