在页面加载中实现IsPostBack

Yer*_*erg 20 asp.net events controls postback

我使用的ASP.NET越多,就越if (!IsPostBack) {}没有意义......

第一个例子:

例如,我只是用谷歌搜索了一个问题,他们说这是解决方案的一部分:

if (!Page.IsPostBack)
{
   Page.LoadComplete += new EventHandler(Page_LoadComplete);
}
Run Code Online (Sandbox Code Playgroud)

完全与编码完全相同,LoadComplete仅在第一次加载时触发.单击按钮或触发回发的任何内容后,LoadComplete事件将取消挂钩,从而跳过事件处理程序.因此,他们的"修复"仅适用于第一次加载=毫无价值.我立即注释掉了if (!Page.IsPostBack) {},现在事件总是按照需要触发.

第二个例子:

我试图将事件挂钩到动态创建的按钮(顺便说一下,我无法开始工作[GRR!]).我看到示例显示:

myEditToggleButton = new Button();
myEditToggleButton.ID = "editToggleButton"; 
//^GOTTA HAVE THIS FOR EVENTS TO WORK! (supposedly, I haven't seen it work...)
if (!IsPostBack)
{
   myEditToggleButton.Click += new EventHandler(myEditToggleButton_Click);
}
Controls.Add(myEditToggleButton);
Run Code Online (Sandbox Code Playgroud)

与第一个示例一样,我的理解是在第一次加载页面后不会挂起事件,因此单击一下按钮就是"惰性"(因为点击触发了回发).

题:

你应该什么时候使用if (!IsPostBack) {}?我猜它只与标记创建的控件有关.

Cla*_*edi 17

简而言之,每次只需要在第一次加载时执行某些操作时,就可以使用它.

经典用法Page.IsPostBack是数据绑定/控件初始化.

if(!Page.IsPostBack)
{
   //Control Initialization
   //Databinding
}
Run Code Online (Sandbox Code Playgroud)

所坚持的东西ViewState,并ControlState没有需要对每一个回传重新所以你为了避免执行不必要的代码检查此条件.

另一个经典用法是获取和处理Querystring参数.您不需要在回发时执行此操作.


Spo*_*oks 6

当没有必要重复第一次以外的操作时.

将它用于昂贵的操作(例如从数据库获取数据或填充ListItems),这些操作必须在第一次加载页面或控件时执行.如果页面已发布到服务器然后重新加载,则无需重复该操作.通过测试IsPostBack的值,您可以跳过昂贵的操作,