【问题标题】:Why is my session variable declared in master page blank on a web page?为什么我的会话变量在主页上的母版页中声明为空白?
【发布时间】:2014-05-02 16:47:15
【问题描述】:

我在母版页加载中声明:

Session["sessionString"] = "stringX";

在我加载的网页中,我也称它为

string sessionString= (string)Session["sessionString"];

我在网页中调试和值是“”有什么问题?

【问题讨论】:

  • 将该值作为 get{} set{} 属性存储在母版页中,并在子页中进行相应访问

标签: c# asp.net master-pages session-variables


【解决方案1】:

在 Master PreRender 中声明会话

protected override void OnPreRender(EventArgs e)
{
   Session["sessionString"] = "stringX";
}

并通过 ContetPage OnUnload 事件获取

protected override void OnUnload(EventArgs e)
{
   string sessionString= (string)Session["sessionString"];
}

【讨论】:

    【解决方案2】:

    JW Lim 是正确的...内容页面的加载事件将在母版页加载之前触发。

    @user3445314 ,您可以在 Global.asax 中使用“Session_Start”事件,并设置与您在母版页中设置的值相同的值。

    “Session_Start”事件首先触发,然后您的内容页面加载事件发生。

    希望这能解决你的问题

    【讨论】:

    • 谢谢!明白了。我会考虑到这一点。
    • @user3445314 我建议反对使用 Global.asax 中的Session_Start 事件。 每次新会话开始时,您都将设置该值。使用母版页上的 InitPreLoad 事件。除非您打算在许多网页上使用 sessionString 的值,在这种情况下,您应该在母版页或另一个 GlobalValues 类中将其声明为公共常量,而不是将其存储在会话中。
    【解决方案3】:

    内容页的Page_Load 事件被称为母版页的Page_Load 事件之前(参见SO answerMSDN article)。因此,当你打电话时

    string sessionString= (string)Session["sessionString"];
    

    在您的网页中,Session["sessionString"] 尚不包含任何值,默认为空字符串。

    作为一种解决方法,您可以在母版页的InitPreLoad 事件上设置Session["sessionString"] 的值。

    【讨论】:

    • 我认为母版页总是首先被调用。无论如何,就我而言,是的,母版页是第一位的。我在两者中都放了断点,母版页是第一个,然后检查内容页面,在 sessionString 变量上显示“”:(
    • @user3445314 不,内容页面的Load 事件总是首先被调用。这是official MSDN reference:“6. 内容页面加载事件。7. 母版页面加载事件”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-31
    • 2015-06-03
    • 2017-10-28
    • 1970-01-01
    相关资源
    最近更新 更多