当前位置:编程学习 > C#/ASP.NET >>

关于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
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,