2012-05-24 35 views
0

我正在經歷一個非常奇怪的問題。

我在第一頁上有一個下拉菜單,所以我從下拉列表中選擇一個值並單擊一個按鈕。
在點擊我移動到另一個頁面,使頁面上我用這個和第一頁上獲取從下拉列表中選擇的值:如何通過MVC3中的會話獲取值

int hobbyid = Convert.ToInt32(formcollection["Hobby"]); 

現在的問題是新的頁面出現在選項卡下。

等第一頁上的按鈕點擊它移動到此選項卡,但如果我去其他頁面,然後通過單擊它的tab.bck到這個頁面。現在formcollection方法不會產生任何價值我解決這個問題?
我可以使用會話來解決這個問題嗎?
但我不知道如何使用它。請幫助我

回答

0

如果你想保持愛好,那麼你必須將它保存在某個地方。一種方法是保持querystrings。即:當你移動到第一個選項卡時,傳遞hobbyid作爲qyerystring的一部分,然後在那裏讀取它並設置爲該頁面中所有相關鏈接的qyerystring部分(指向您想要hobbyid的頁面)以及。然後,如果formcollection [「hobby」]爲null,則應該從查詢字符串中讀取值。

另一種方法是使用會話。因此,無論何時使用從dropdwon中選擇一個項目並提交,將其設置爲一個會話變量並從那裏訪問它。

Session["selectedHobby"]="some value read from the form"; 
0

您可以使用ASP.net TempData。

TempData僅適用於用戶的會話,並且只有在我們讀取它之後纔會保留,然後在請求結束時它會被清除。可以使用TempData當數據需要在兩個請求或重定向場景之間持續存在時。

商店:

[HttpPost] 
    public ActionResult MyAction(UserInfo user) { 


    TempData["Hobby"] = User.Hobby;//In USerInfo view model Hobby property is of type string or int depends on what you need) 

return RedirectToAction("Index"); 

} 

Retrive它的觀點:

<div> 
@if (TempData["Hobby"] != null) { 

<p>Hobby: @TempData["Hobby"]</p> 

} 
</div>