必须单击两次按钮才能触发事件

时间:2015-04-30 16:47:39

标签: c# asp.net webforms

我有一个动态创建的数据网格,用于显示从数据库中检索的信息。数据网格由每行的多个绑定列和两个按钮列组成,包括视图和删除按钮。

单击任一按钮将Page.IsPostBack调用为Page_Load()方法为false。

    if (!Page.IsPostBack)
    {           
        this.bindForm(); // Populates drop down lists that the user can select     
        setAccess(false); // Sets access for the page 

        // Stuff commented out to avoid confusion                   
    }
    else
    {
        bindDynamicGrids(); // Create the data grid(s) and populate them           
    }   

因此,当我第一次单击按钮时,上面的代码被调用IsPostBack为false,动态网格被绑定。但是,按钮单击事件不会触发。当我第二次单击该按钮时,使用IsPostBack false调用Page_Load,并在执行bindDynamicGrids()后触发按钮单击事件。我无法理解第一次和第二次点击之间的区别。

我读了几个帖子;

ASP.NET C#, need to press a button twice to make something happen

http://forums.asp.net/t/1783694.aspx?ASP+NET+Button+needs+to+be+clicked+twice

试图理解这个问题,但我必须遗漏一些东西。根据我从第二个链接收集的内容,可能会在click事件中设置会话变量,该事件也在Page_Load中设置,这对于排序来说都是一个问题。如果是这种情况,我没有看到它发生在哪里。

当它不是回发时,会调用bindForm()方法,该方法会填充所有下拉列表。编辑单击事件使用行中的值填充这些下拉列表,但click事件始终是回发并且表单已被绑定。

我还考虑过,只要用户单击,脚本就会自动双击其中一个按钮,但我无法找到列按钮的“OnClick”属性。任何可以提供的帮助都是惊人的。

1 个答案:

答案 0 :(得分:0)

问题是,按钮单击事件发生在Page_Load事件之后,意味着过滤未在第一个回发上应用。它已在第二次回发时更新,您会看到过滤。 您可以尝试将page_load事件的代码移动到OnPreRender,以便在按钮单击事件之后重新加载。

有关详细信息,请查看此处:Button needs to be clicked twice  和here