Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.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
Asp.net 页面加载中IsPostBack的实现_Asp.net_Events_Controls_Postback - Fatal编程技术网

Asp.net 页面加载中IsPostBack的实现

Asp.net 页面加载中IsPostBack的实现,asp.net,events,controls,postback,Asp.net,Events,Controls,Postback,我越是使用ASP.NET,如果(!IsPostBack){}看起来越没有意义 第一个例子: 例如,我刚在谷歌上搜索了一个问题,他们说将此作为解决方案的一部分: if (!Page.IsPostBack) { Page.LoadComplete += new EventHandler(Page_LoadComplete); } LoadComplete只会在第一次装载时开火。单击按钮或触发回发的任何内容后,LoadComplete事件将保持未钩住状态,从而跳过事件处理程序。因此,它们的“修

我越是使用ASP.NET,如果(!IsPostBack){}看起来越没有意义

第一个例子:

例如,我刚在谷歌上搜索了一个问题,他们说将此作为解决方案的一部分:

if (!Page.IsPostBack)
{
   Page.LoadComplete += new EventHandler(Page_LoadComplete);
}
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);
像第一个例子一样,我的理解是,事件在第一次页面加载后不会被钩住,因此按钮在一次单击后是“惰性的”(因为单击触发了回发)

问题:


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

它用于处理表单数据


如果要处理已发布的数据,则仅当页面实际发布了数据,而不是第一次加载时,才需要这样做。因此,当除第一次操作外无需重复该操作时,IsPostBack标志将显示。


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

如果导致回发,您可以更改控件的状态,而无需更改。例如,在使用gridview时,如果在编辑模式下回发,则将无法再访问编辑字段

通常,当您点击服务器时,您需要保留页面上不显示的信息,这是关键

if(!Page.IsPostBack)

简言之,每次只在第一次加载时需要执行某些操作时,都会使用它

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

if(!Page.IsPostBack)
{
   //Control Initialization
   //Databinding
}
ViewState
ControlState
上持久化的内容不需要在每次回发时重新创建,因此您需要检查此条件以避免执行不必要的代码


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

只要可以触发事件,就应该连接事件处理程序(无论回发状态如何)


另外,在动态添加控件时,请确保遵守asp。此外,如果要初始化控件,则必须使用IsPostBack,否则每次加载时都会将其还原为默认值。这会让用户感到困惑,因为当他们尝试使用表单时,他们输入的值将重置为默认值。

首先,当您在Visual Studio中启动项目时,您需要了解什么是回发,
protected void Page_Load(object sender, EventArgs e)            
{
    if (!IsPostBack) { 
        SqlConnection conn = new SqlConnection("Data Source=-----; Database=-----; Integrated Security=True");
        SqlDataAdapter da = new SqlDataAdapter();
        conn.Open();
        da.SelectCommand = new SqlCommand("Select Command",conn);
        conn.Close();
        DataTable dt = new DataTable();
        da.Fill(dt);

        ddlSearch.DataSource = dt;
        ddlSearch.DataTextField = "---";
        ddlSearch.DataValueField = "---";
        ddlSearch.DataBind();
    }
}
如果在
Page\u Load
方法中有一个
if语句检查
isPostBack
true
还是
false
,此时,
isPostBack
false
,意味着它不是
postback
,那么什么是postback,
现在单击一个
按钮(如果您没有按钮,请添加一个按钮和按钮单击方法),此时,您向服务器发送一个请求,服务器随后响应,这个过程就是所谓的
回发
,通过单击
按钮触发


您需要注意的一点是,
页面加载
方法将再次执行,而不仅仅是
按钮点击
方法将被执行,因此现在,
isPostBack
真的
,意味着它是回发,是的,它确实是回发,因为您点击了按钮。

,使用任何动态添加的控件,它们都会蒸发。因此,例如,如果您动态添加了一个下拉框,则at下拉框中的项目将与下拉框本身一起蒸发。@Yerg,那么您需要在if(!IsPostBack)@Yerg之前添加这些控件。此页面应帮助您了解IsPostBack与动态控件的关系@但是您仍然需要钩住事件,因为您之前钩住的控件由于页面重新加载而转到了la la land。你所建议的是我在上面的例子中所做的,但这不起作用。@Lucas Heneks是的,我在一天的谷歌搜索中发现了这个链接。这就是我学到我必须有一个ID的地方。不管怎样,Danke。是的,Viewstate绝对是使用它的主要力量坦率地说,load事件中的任何代码都没有包装在!在代码审查期间,Page.IsPostBack对我来说是一个危险信号。这通常表明人们对webforms的工作方式存在误解,尤其是在数据绑定方面。