Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 加载页面前单击按钮_C#_Asp.net_Session_Postback - Fatal编程技术网

C# 加载页面前单击按钮

C# 加载页面前单击按钮,c#,asp.net,session,postback,C#,Asp.net,Session,Postback,我正在使用一个包含用户控件的简单页面中的通用列表 我使用Session变量填充此列表。此会话变量在我的按钮单击事件中设置 当用户单击按钮时,会设置会话变量并进行回发。问题是在按钮单击事件之前调用页面加载…我们知道这是标准页面的生命周期 最后,我的通用列表没有更新,因为会话变量是在页面加载之后设置的 编辑:我的会话变量是在一个函数中设置的,该函数由一个代理在我的用户控件的按钮单击时处理 有没有办法防止这种情况发生?是否有一种解决方案可以使用session变量使列表的值在多次回发时保持不变 谢谢你的

我正在使用一个包含用户控件的简单页面中的通用列表

我使用Session变量填充此列表。此会话变量在我的按钮单击事件中设置

当用户单击按钮时,会设置会话变量并进行回发。问题是在按钮单击事件之前调用页面加载…我们知道这是标准页面的生命周期

最后,我的通用列表没有更新,因为会话变量是在页面加载之后设置的

编辑:我的会话变量是在一个函数中设置的,该函数由一个代理在我的用户控件的按钮单击时处理

有没有办法防止这种情况发生?是否有一种解决方案可以使用session变量使列表的值在多次回发时保持不变

谢谢你的帮助


昆汀

在点击事件中,您应该做三件事:

  • 将常规列表保存到会话
  • 保存类似cookie的标志(可以是会话值),表示列表已保存
  • Resonse.Redirect(Request.RawURL)
    重定向到同一页面
  • 在Page_Load事件中,您应该执行以下操作:

    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事件通常用于在控件显示在页面上之前初始化控件的值


    谢谢您的帮助。

    您好,您的解决方案似乎不错。但是,它会引发其他问题。实际上,用户在主页中输入的所有其他变量都会随响应一起被忘记。重定向。如果创建了链接按钮等控件,则不会。