我正在开发一个在许多页面上使用类似功能的应用程序。我有一个屏幕,打开一个模态窗口,允许用户进行搜索。当用户单击记录时,记录名称首先保存在会话中,然后要求父窗口关闭模式,然后刷新。
然后在父母的页面加载上,我检查一下搜索文本会话的值是什么,然后我用它来搜索其他数据并填充屏幕。
此设置在我开发的第一个屏幕上工作正常,并且没有一次失败。问题是,在我以完全相同的方式设置的附加屏幕上,在父窗口的页面加载上检查会话值时,它只是设置为NULL,我甚至从工作中复制了相同的代码这个页面应该是相同的。
子窗口JS:
<script type="text/javascript">
function sendval() {
window.parent.onSave(); - Just switches off a checkdirty function.
window.parent.location.reload(); - Reloads the parent so it can get the val on page load
}
</script>
子窗口按钮:
<asp:Button ID="Button1" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "AddressCode") %>' OnClientClick="sendval();" OnClick="Button1_Click" />
子窗口按钮方法:
protected void Button1_Click(object sender, EventArgs e)
{
string buttonText = ((Button)sender).Text;
Session["CustTypeVal"] = buttonText;
}
父窗口检查会话值(这是会话在一个页面上返回null而在另一个页面上没有的位置:
protected void Page_Load(object sender, EventArgs e)
{
//get the session variable from the open page in order to do the search.
if (Session["CustTypeVal"] != null)
{
//The method you need to run after refresh
SearchInvAddr((string)Session["CustTypeVal"]);
//Remove the session after
Session.Remove("CustTypeVal");
}
}
我很感激这方面的任何帮助。
答案 0 :(得分:1)
您的代码
protected void Page_Load(object sender, EventArgs e)
{
//get the session variable from the open page in order to do the search.
if (Session["CustTypeVal"] != null)
{
//The method you need to run after refresh
SearchInvAddr((string)Session["CustTypeVal"]);
//Remove the session after
Session.Remove("CustTypeVal");
}
}
如果这是您的第一页,并且您在第二页上拥有完全相同的代码,则会话值不再存在,因为
Session.Remove("CustTypeVal");
如果您正在使用会话值,则在注销之前不必清除它们,因此除非它可能被用于违反安全性,否则不需要删除它们。