我有一个动态创建的数据网格,用于显示从数据库中检索的信息。数据网格由每行的多个绑定列和两个按钮列组成,包括视图和删除按钮。
单击任一按钮将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”属性。任何可以提供的帮助都是惊人的。
答案 0 :(得分:0)
问题是,按钮单击事件发生在Page_Load事件之后,意味着过滤未在第一个回发上应用。它已在第二次回发时更新,您会看到过滤。 您可以尝试将page_load事件的代码移动到OnPreRender,以便在按钮单击事件之后重新加载。
有关详细信息,请查看此处:Button needs to be clicked twice 和here