关于IsPostback的一个问题
下面的一个页面,如果有If Not Page.IsPostBack Then这个判断就一切正常。如果没有,则点击按钮后文本框的值总会变回最初的值。请问这是怎么回事呢?<%@ Page Language="VB" %>
<%@ Import Namespace="System.Drawing" %>
<%@ Import Namespace="System.Collections.Generic" %>
<script runat="server">
Sub btnUpdatePreferences_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Profile.Name = txtName.Text
Response.Redirect(Request.Url.LocalPath)
End Sub
Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
If Not Page.IsPostBack Then
txtName.Text = Server.HtmlEncode(Profile.Name)
End If
End Sub
</script>
<html>
<head id="Head1" runat="server">
<title>View and Change your Profile Properties</title>
</head>
<body>
<form id="form1" runat="server">
<div id="styleContainer" runat=server>
<table id="tblLogin" cellspacing="0" cellpadding="0" >
<tr>
<td width="40%" class="lcol">
What is your name?</td>
<td class=rcol>
<asp:textbox id="txtName" runat="server" width="100%"></asp:textbox>
</td>
</tr>
<tr>
<td align="center" colspan="2" class="lcol" style="border-bottom: black thin solid">
<asp:button id="btnUpdatePreferences" runat="server" text="Update Preferences" onclick="btnUpdatePreferences_Click" />
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
--------------------编程问答-------------------- .NET运行的原理. --------------------编程问答-------------------- If Not Page.IsPostBack Then
这句表示如果页面没有提交过,就执行下面代码 如果已经提交过 就不再执行了 --------------------编程问答-------------------- 点击按钮后都要刷新页面,这样就又执行了page_load事件,又重新绑定了,所以就总会变回最初的值 --------------------编程问答-------------------- 补充一点,没有若If Not Page.IsPostBack Then,修改了文本框的值后点击按钮总会变回最初的值。 --------------------编程问答-------------------- 呵,If (Page.IsPostBack) Then是PostBack回去时处理的。
要不就会重新初始化了,就回去了。。。 --------------------编程问答-------------------- http://www.cnblogs.com/artech/archive/2007/04/06/702658.html
对你可能有帮助. --------------------编程问答-------------------- 每次postback都会触发Page_load事件,所以,如果不加回滚判断,Page_load里的事件就会总是执行。
能触发回滚(postback)的事件很多,比如点击按钮,比如刷新页面,比如下拉框……
也就是说,
你如果不加If Not Page.IsPostBack Then的话,每次点按钮都会执行到txtName.Text = Server.HtmlEncode(Profile.Name)
这行代码,假如你点击按钮了,就会重新执行一次,当然就会变成初始值。
如果你加了,
那么第一次进入这个页面的时候会执行,但是点击按钮后再次Page_load时,就不会执行那段代码。 --------------------编程问答-------------------- 对。搞清楚原理(postback和get请求页面时的差别、无状态的page处理、控件自我维持状态的机制),判断你自己的代码是否应该有这个判断。
以前csdn上有不少见到状态问题就说是page_load中的代码没有写在这个判断里边的,这种就是另外一个极端,仍然写不出逻辑正确的程序。 --------------------编程问答-------------------- *************************
每次postback都会触发Page_load事件,所以,如果不加回滚判断,Page_load里的事件就会总是执行。
能触发回滚(postback)的事件很多,比如点击按钮,比如刷新页面,比如下拉框……
也就是说,
你如果不加If Not Page.IsPostBack Then的话,每次点按钮都会执行到txtName.Text = Server.HtmlEncode(Profile.Name)
这行代码,假如你点击按钮了,就会重新执行一次,当然就会变成初始值。
如果你加了,
那么第一次进入这个页面的时候会执行,但是点击按钮后再次Page_load时,就不会执行那段代码。
*********************
但是我在按钮点击事件里定义了Profile.Name = txtName.Text,在点击按钮后,是Page_load事件里的代码先运行,还是按钮点击事件的代码先运行?如果是Page_Load事件先运行就和你们说的一样,如果是按钮点击事件先运行的话就不知道是怎么回事了
还有一件事,我在按钮点击事件里还写了一句代码Response.Redirect(Request.Url.LocalPath),有了这句话,我在Page_Load事件里加上response.write(Page.IsPostback),总是显示false,也就是说If Not Page.IsPostBack then总是为真,也就是说里面的代码总要运行的。就和不加if应该一样啊。真是让人搞不懂。
哪位大哥能帮忙搞明白!! --------------------编程问答-------------------- 每次postback都会触发Page_load事件,所以,如果不加回滚判断,Page_load里的事件就会总是执行。
--------------------编程问答-------------------- 哎,不知道说LZ什么好了。
你在程序上加断点,然后运行,停住后,用F11一步一步跟踪着运行下去。你就能找到原因了。
多动脑筋。不要进死胡同…… --------------------编程问答-------------------- Response.Redirect之后这个页面就不是回滚了,相当于第一次进这个页面!所以ispostback当然为真!!!
--------------------编程问答-------------------- Response.Redirect之后这个页面就不是回滚了,相当于第一次进这个页面!所以ispostback当然为真!!!
***************
不对吧。页面不回滚ispostback当然为false啦,也就是说不是为响应客户端回发而加载该页面。我用程序验证过的 --------------------编程问答-------------------- 控件生命周期,MS定的。 --------------------编程问答-------------------- Response.Redirect(Request.Url.LocalPath)
这句话是asp程序写法,永远重定向到相同url的新页面(使用get方式访问新页面,而不是postback)。如果你写asp.net回发机制的程序,如果你打算给用户一个时钟在一个页面上操作的效果,不要重定向到新的页面,删除这一行代码。 --------------------编程问答-------------------- 如果你重定向到相同url的“新页面”,要求控件给你保持状态是没有依据的。asp不能做到维持状态,asp.net也不能做到维持状态。 --------------------编程问答-------------------- 学习了! --------------------编程问答-------------------- 如果你搞不清楚原理,就算别人现在跟你解决了,你也是假装明白的状态,,多去看看页面的生命周期,重点关注下VIEWSTATE,什么是回发,为什么有这个机制,等等
补充:.NET技术 , ASP.NET