C# 加载页面前单击按钮
我正在使用一个包含用户控件的简单页面中的通用列表 我使用Session变量填充此列表。此会话变量在我的按钮单击事件中设置 当用户单击按钮时,会设置会话变量并进行回发。问题是在按钮单击事件之前调用页面加载…我们知道这是标准页面的生命周期 最后,我的通用列表没有更新,因为会话变量是在页面加载之后设置的 编辑:我的会话变量是在一个函数中设置的,该函数由一个代理在我的用户控件的按钮单击时处理 有没有办法防止这种情况发生?是否有一种解决方案可以使用session变量使列表的值在多次回发时保持不变 谢谢你的帮助C# 加载页面前单击按钮,c#,asp.net,session,postback,C#,Asp.net,Session,Postback,我正在使用一个包含用户控件的简单页面中的通用列表 我使用Session变量填充此列表。此会话变量在我的按钮单击事件中设置 当用户单击按钮时,会设置会话变量并进行回发。问题是在按钮单击事件之前调用页面加载…我们知道这是标准页面的生命周期 最后,我的通用列表没有更新,因为会话变量是在页面加载之后设置的 编辑:我的会话变量是在一个函数中设置的,该函数由一个代理在我的用户控件的按钮单击时处理 有没有办法防止这种情况发生?是否有一种解决方案可以使用session变量使列表的值在多次回发时保持不变 谢谢你的
昆汀在点击事件中,您应该做三件事:
Resonse.Redirect(Request.RawURL)
重定向到同一页面protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (Session["MyFlag"] != null)
{
//Perform whatever you need to do with your already saved generic list in Session
Session["MyFlag"] = null;
}
}
}
如果您需要在回发会话中存储一个复杂的对象(如通用列表),您的朋友就是您的朋友。如果您只需要存储一个值,您可以使用cookie或ASP.HiddenField,但为此,您最好使用会话。为什么不将会话设置在:
if(!IsPostback)
{
// your session setting here (or method)
}
因此,它将在回发过程中保留该值,而不会在每次回发时设置该值
您还可以声明一个方法,您可以从!IsPostback或您的cick事件。您也可以尝试将代码从Page_Load移动到Page_PreRender,这将在您的按钮单击事件后触发。这应该可以解决您遇到的问题。我找到了解决方案:我必须覆盖主页的Pre_render函数。 实际上,生命周期是:页面加载->按钮单击->页面预渲染 因此,在Pre_render函数中,我可以设置会话变量,并根据需要使用它 据我所知,Pre_Render事件通常用于在控件显示在页面上之前初始化控件的值
谢谢您的帮助。您好,您的解决方案似乎不错。但是,它会引发其他问题。实际上,用户在主页中输入的所有其他变量都会随响应一起被忘记。重定向。如果创建了链接按钮等控件,则不会。