簡體   English   中英

如何獲取會話變量值並在控制器變量中進行設置?

[英]How to get a session variable value and set in a controller variable?

我有一個像這樣的控制器:

public class LoginController : Controller
{
    private Int32 _companyID;

    // My actions
}

此變量_companyID(顯然)應包含公司的ID,並且此值當前在會話中。 我想獲取該值並在控制器變量上進行設置。

編輯 :我正在使用此變量,因為我必須從會話中檢查有關此值的一些事情,並且我不想在每個操作中都重復此代碼。 相反,我只想檢查我需要的東西,在變量中設置此值,然后在操作中使用它。

在WebForms上,我只需要在頁面加載事件中從會話中獲取值就可以了。 但是在MVC中,我不知道該怎么做。

我首先想到的是在構造函數中獲取此值,如下所示:

public LoginController()
{
    _companyID = Convert.toInt32(Session["companyID"]);
}

但是我發現無法在構造函數上訪問會話(對我而言這是空的)。

然后我考慮使用過濾器,但是我無法弄清楚如何在控制器變量中設置值。 我已經嘗試過這種方式:

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    base.OnActionExecuting(filterContext);
    Int32 _companyID = Convert.toInt32(HttpContext.Current.Session["idEmpresa"]);

    // I couldn't pass this value directly to the controller variable
}

我已經看到了幾種將值從過濾器傳遞到控制器的方法,但是所有這些方法都隱含了在我的操作中要從過濾器獲取該值的額外代碼,而我不希望這樣做。 我想要一種無需更改任何已執行或將要執行的操作即可獲得所需值的方法。

有辦法嗎?

我希望我的問題很清楚。 提前致謝!

首先,該變量不是全局變量,它是控制器上的實例變量。 有點古怪,是的,但是那是完全不同的東西。

其次,無論如何都沒有必要使用會話中的值在控制器上設置ivar,因為控制器是隨每個請求實例化和處置的。 換句話說,無論如何,這絕不會在動作之間共享。 每次您調用新動作時,都必須重新設置ivar。

最后,盡管可以使用過濾器,但由於最后一點,它是不必要的。 如果在控制器操作中需要會話變量,則只需直接從該操作中訪問它即可。 如果需要將其傳遞給視圖,則可以在ViewBag或視圖模型中進行設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM