我使用的ASP.NET越多,if (!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);
与第一个示例一样,我的理解是在第一次加载页面后不会挂起事件,因此单击一下按钮就是“惰性”(因为点击触发了回发)。
问题:
什么时候应该使用if (!IsPostBack) {}
?我猜它只与标记创建的控件有关。
答案 0 :(得分:17)
简而言之,每次只需要首次加载时就可以使用它。
Page.IsPostBack
的经典用法是数据绑定/控件初始化。
if(!Page.IsPostBack)
{
//Control Initialization
//Databinding
}
在ViewState
和ControlState
上保留的内容不需要在每次回发时重新创建,因此您需要检查此条件以避免执行不必要的代码。
另一个经典用法是获取和处理Querystring
参数。你不需要在回发时这样做。
答案 1 :(得分:6)
如果不需要重复第一次以外的操作。
将它用于昂贵的操作(例如从数据库获取数据或填充ListItems),这些操作必须在第一次加载页面或控件时执行。如果页面已发布到服务器然后重新加载,则无需重复该操作。通过测试IsPostBack的值,您可以跳过昂贵的操作,
答案 2 :(得分:4)
用于处理表单数据。
如果您想处理POSTed数据,您只想在页面实际发布数据时执行此操作,而不是首次加载。因此,IsPostBack标志。
答案 3 :(得分:3)
如果导致回发会发生什么情况,您可以更改控件的状态,而无意义。例如,在使用网格视图时,如果在编辑模式下回发,您将无法再访问编辑的字段。
当您点击服务器时,通常需要保护信息不会在页面上消失,这就是
if(!Page.IsPostBack)
答案 4 :(得分:1)
每当事件被触发时,您的事件处理程序都应该连线(不论PostBack状态如何)
此外,在动态添加控件时,请务必遵守asp page lifecycle
答案 5 :(得分:1)
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();
}
}
答案 6 :(得分:0)
此外,如果要初始化控件,则必须使用IsPostBack,否则它们将在每次加载时恢复为默认值。这会使用户感到困惑,因为当他们尝试使用表单时,他们输入的值将重置为您的默认值。
答案 7 :(得分:0)
首先,您需要了解在Visual Studio中启动项目时回发的内容,
如果您有if statement
检查isPostBack
方法中true
是false
还是Page_Load
,那么isPostBack
是{{} 1}},表示它不是false
,那么回发是什么,
现在点击一个postback
(如果你没有按钮,请添加一个按钮点击方法),此时,你发回一个请求回服务器,然后服务器响应,这个过程是所谓的button
,通过点击postback
,
您需要注意的一件事是,button
方法将再次执行,不仅会执行Page_Load
方法,所以现在,Button_click
为{{1} ,表示它是回发,是的,它确实是一个回发,因为你点击了按钮。