2013-10-08 54 views
0

我正在使用ASP MVC應用程序,並試圖在一個控制器中創建會話變量,然後在不同的控制器中訪問該會話變量。我已經找到了關於PHP的文章,但我無法找到ASP MVC的解決方案。如何在ASP MVC中使用和保存會話變量

我的代碼,現在做一個AJAX調用一個控制器來更新賬號:

   $.ajax({ 
        type: "PUT", 
        url: defender.techWebBaseUrl + "jobsinprogress/storenewmonitoringacctnumber/", 
        data: { acctNum: $("#newAcctNumber").val() } 
       }); 

此執行控制器上:

public void StoreNewMonitoringAcctNumber(string acctNum) 
    { 
     Session["MAN"] = acctNum; 
    } 

成功地創建會話變量。後來在我的工作流程,在一個完全獨立的/不同的控制器我試圖訪問這個相同的變量:

.Configure(job, type, "sent", licenseStamp, EmployeeSignatureKey, Session["MAN"].ToString()); 

但每一次會話變量爲NULL。我試圖理解如何在MVC中保存會話變量,因爲顯然ASP.NET Web表單中的相同規則在這裏不適用。此外,保存Session變量然後嘗試訪問Session變量的這些操作必須存在於不同的控制器上,所以我絕對必須找到一種方法來保存該變量。

任何意見表示讚賞。

+0

你確定他們正在執行正確的順序嗎?你發佈的內容應該有效。儘管調用'Session [「MAN」]。ToString()'是沒有意義的,它已經返回一個字符串。 –

+0

是的他們執行正確的順序。 Configure方法在我的第一個控制器上方法下游使用的控制器上執行。 – Encryption

+0

是否啓用會話?看看你的web.config是否包含如下內容:''。 –

回答

3

您正在嘗試使用web表單的心態在MVC方面,它不會在所有的工作......

你很少需要在MVC爲「堅持」的變量,你會在web表單通過做同樣的方式使用viewstate/session。在MVC中,通常通過使用強類型視圖完成,並將模型實例傳遞到視圖中,從而訪問該變量。

在一些罕見的情況下,您可以使用TempData/ViewData/Session,但它不是真的建議你在做什麼。

我建議你閱讀關於MVC的更多內容,以及如何使用強類型視圖。 This link是一個好的開始。

+0

我得到強類型的視圖方法。但是,這只是一個例子。我不認爲每當需要在兩個控制器之間短時間保存一個變量時,習慣創建每個特定於某些信息的強類型視圖是很有好處的。這是一個相當大的應用程序,已經有很多部分。 – Encryption