2015-12-03 77 views
0

我一直在尋找本網站上有關將模型數據保存到會話的一些解決方案,但似乎沒有一個適用於我,或者很可能我沒有正確理解它,確定如何實施它。在會話中保存模型並在視圖中使用

這是我一直在嘗試的最新解決方案。 c# - How to save object to session in ASP.NET

在指數我得到有關聲明模型告訴我一個錯誤的用戶不存在

型號

public class User 
{ 
    public int Id { get; set; } 
    public string Username { get; set; } 
    public string Password { get; set; } 
} 

控制器

public ActionResult Index() 
{ 
    using (DefaultConnection db = new DefaultConnection()) 
    { 
     var model = from u in db.Users select u; 

     var vm = (User)Session["User"]; 

     return View(vm); 
    } 
} 

查看

@model User 

@Model.Username 
+0

您是否已經設置了某個會話? – Shyju

+0

不,我做了一個新的應用程序,只是爲了測試設置模型到會話 –

+0

然後你需要先設置它。看到我的答案。 – Shyju

回答

1

我不太清楚你在這裏想達到什麼。但我可以看到一些問題,在您的代碼

var vm = (User)Session["User"]; 

您試圖訪問會話變量與關鍵User,並試圖將其轉換爲User實例。這意味着,在執行此代碼之前,您應該將有效的用戶對象設置爲Session [「User」]。如果您不這樣做,您的投射將失敗(代碼將崩潰),因爲會話沒有任何密鑰「用戶」的項目

如果尚未設置,請在訪問此會話對象之前爲會話設置有效的User對象。

var us = new User { Id=1, Username="test"}; 
Session["User"] = us; 

後來從會議項目訪問之前,您應經常檢查它是否爲空或不是

User u = null; 
if(Session["User"]!=null) 
{ 
    u = Session["User"] as User; 
    // you may use u now. 
} 

而且,你是從Users表查詢和選擇記錄小號到變量model。但是你並沒有在你的代碼中使用它。我不知道你爲什麼想這樣做。

我不確定你爲什麼使用會話。如果您試圖在您的操作方法之間傳遞數據以查看,還有其他更好的解決方案,如使用視圖模型(首選),ViewBag等。

記住會話數據在整個應用程序中可用於當前會話。只有一頁。明智地使用它。

0

爲了將模型保存到會話中,需要先設置會話對象,例如,

using (DefaultConnection db = new DefaultConnection()) 
{ 
    var model = from u in db.Users select u; 
    Session["User"] = model; //Part where you set/save into the session 
    var vm = Session["User"] as User; //Part where you retrieve into the session 
    return View(vm); 
} 
+0

Now how我在我的視圖中訪問vm的值嗎? –

0
User user = Session["User"] as User; 
if (user == null) user = new User(); 
0

如果您要訪問的視圖您的ViewModel,你可以做到這一點在許多方面的一種方法是您的視圖關聯到模型(被稱爲強類型的觀點)。你可以在你看來這樣做:

@model type @*Associate your view to a ViewModel, where type is your ViewModel Class*@ 

<h1>@Model.Name</h1> @*access the properties of your view using @Model *@ 

@model使用而@Model用於訪問視圖的關聯模型到模型的視圖相關聯。我建議你先閱讀ASP.NET MVC的工作原理。您可以訪問ASP.NET MVC tutorial on views