【发布时间】:2014-10-17 20:59:37
【问题描述】:
这个问题是在按下按钮后试图让 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 即可调用。在Page_Load 中使用popup.ShowOnPageLoad = ShowPopup; 时,ViewState["ShowPopup"] 是null,因此它返回false。
然后我尝试使用HiddenField。于是我把ShowPopup改成了:
bool ShowPopup
{
get
{
return hfShowPopup.Value != "" && hfShowPopup.Value.ToLower() != "false";
}
set
{
hfShowPopup.Value = value.ToString();
}
}
在单击按钮时再次使用ShowPopup = true,当Page_Load 中读取ShowPopup 时,其值为"",因此ShowPopup 为false。
然后我尝试通过hfShowPopup.Value = "true"; 直接设置HiddenField 并使用
popupDuplicatePlayer.ShowOnPageLoad = hfShowPopup.Value != "" && hfShowPopup.Value.ToLower() != "false";
在Page_Load 中,但hfShowPopup.Value 又是空的。
我在同一页面中使用了许多其他变量来读取/写入ViewState,它们工作正常。我知道ViewState 和HiddenField 在页面生命周期的早期可能不存在,但在Page_Load 中使用,所以应该没问题吗?我还尝试在 Page_LoadComplete 中访问它们,但遇到了同样的问题。页面上没有UpdatePanels,所以这不是问题,还有其他原因吗?
我认为ViewState、HiddenField AND 直接设置的ShowOnPageLoad 的问题是相关的?
【问题讨论】:
-
隐藏字段的标记是什么?
-
隐藏字段是简单的asp.net控件
<asp:HiddenField ID="hfShowPopup" runat="server" />,呈现为<input type="hidden" name="ctl00$ContentPlaceHolder1$hfShowPopup" id="ctl00_ContentPlaceHolder1_hfShowPopup" />
标签: asp.net popup devexpress viewstate hidden-field