Page_Load上的HiddenField为空,Viewstate值为null

时间:2014-10-17 20:59:38

标签: asp.net popup devexpress viewstate hidden-field

尝试按下按钮后显示DevExpress ASPxPopupControl时,就会出现此问题。使用popup.ShowOnPageLoad = true;似乎不够,检查Page_Load上的值会显示它恢复为false,即使服务器上的代码已经执行完毕。

所以我决定使用一个可以读取和写入ViewState的变量,因此它会持续存在。然后我有变量:

bool ShowPopup
{
    get
    {
        if (ViewState["ShowPopup"] == null)
            return false;
        return (bool)ViewState["ShowPopup"];
    }
    set
    {
        ViewState["ShowPopup"] = value;
    }
}

只需按ShowPopup = true即可按下按钮。在popup.ShowOnPageLoad = ShowPopup;中使用Page_Load时,ViewState["ShowPopup"]null,因此会返回false

然后我尝试使用HiddenField。所以我将ShowPopup更改为:

bool ShowPopup
{
    get
    {
        return hfShowPopup.Value != "" && hfShowPopup.Value.ToLower() != "false";
    }
    set
    {
        hfShowPopup.Value = value.ToString();
    }
}

再次点击按钮时使用ShowPopup = true,在ShowPopup中读取Page_Load时,其值为"",因此ShowPopupfalse HiddenField

然后我尝试通过hfShowPopup.Value = "true";直接设置popupDuplicatePlayer.ShowOnPageLoad = hfShowPopup.Value != "" && hfShowPopup.Value.ToLower() != "false"; 并使用

Page_Load
<{1>}中的

,但hfShowPopup.Value再次为空。

我在同一页面中使用了许多其他变量读取/写入ViewState,它们工作正常。我知道ViewStateHiddenField可能在页面生命周期的早期不存在,但在Page_Load中使用了,所以应该没问题?我还尝试在Page_LoadComplete中使用相同的问题访问它们。页面上没有UpdatePanel,所以这不是问题,还有其他原因吗?

我认为直接设置ViewStateHiddenField AND ShowOnPageLoad的问题是否相关?

1 个答案:

答案 0 :(得分:0)

来自我的相当愚蠢的错误。在按钮按下我重定向到当前页面,而不是允许回发。因此,Page_Load上的值会丢失。非常愚蠢,但无论如何我都明白了。