2010-06-19 79 views
0

好的。让我问的问题是这样的: 一般地,不是页面周期:回发问题

的Page_Load

的onclick和/或提交处理

的Page_Load。

如果是这样,在onclick/submit处理程序期间页面上的控件的值应该是什么?用户选择的值,或来自page_load的值?

回答

2

页面加载事件触发之前控制事件。因此,如果您在页面加载事件中更改值,那么这些更改将覆盖用户选择的任何值,并且在控件事件中,您将看到在页面加载中设置的值。

如果你需要做一些初始化的页面加载事件,但只有当有人来的页面,第一次,你可以使用的IsPostBack:

if(!IsPostBack) 
{ 
    //do initialization that you only want to happen when someone 
    //comes to the page for the first time 
} 

这里是一个很好overview of the ASP.NET page lifecycle还有更多的细节。

下面是一个简单的例子序列:

  1. 浏览器请求的页面
  2. 页面加载火灾
  3. 页面呈现和被发送到浏览器
  4. 用户确实在网页上的东西(点击一个按钮,更改设置为自动回复的文本框等)
  5. 浏览器对页面进行POST POST
  6. 页面加载触发(再次)。这次IsPostBack是真的。另请注意,这与#2中的“页面”对象不同。每个HTTP请求都是一个全新的Page对象。例如,成员变量不会跨请求保存。
  7. 适当控制火的事件(点击,文字改变等)
  8. 页面呈现,如果你检查页面是回发或不被再次
+0

也许我说错了。页面加载事件每次页面加载时触发是不是真的?即使在任何提交事件处理程序启动后? IE: 1.用户请求页面(URL) 2. Web服务器处理页面触发Page_Load作为该过程的一部分。 3.用户与页面上的表单进行交互,更改控件中的某些值。 4.用户单击某个按钮或执行一些将页面提交回服务器的操作。 5.服务器再次处理页面(用户更改等) 现在,page_load事件不会再次触发吗?而且,基本上开始整个过程​​? – john 2010-06-19 15:14:17

+0

是的,每个HTTP请求(包括用户操作引起的初始和每次回发)都会导致页面加载事件触发。如果您希望自己的行为有所不同,IsPostBack会告诉您如何区分第一个请求和后续回发。 – 2010-06-19 15:43:51

+0

ASP.NET有很长的事件列表,可以触发并为每个页面请求执行特定的事情。请阅读http://aspalliance.com/134 – Bill 2010-12-15 20:46:00

0

发送回浏览器这要看。

请考虑以下示例 - 系统用户有机会在Web窗体上更改其名称。加载页面时,用户名称将显示在文本框中的页面上。用户然后可以点击一个按钮来保存他们的名字。

在此示例中,让我们假设名为“John Smith”的用户将其用户名错误地存储为“John Jones”。然后,他决定通过在用户名字段中输入“John Smith”来更改他的用户名。

protected void Page_Load(object sender, EventArgs e) 
{ 
this.txtName.Text = "John Jones"; 
} 

protected void SaveDetails(object sender, EventArgs e) 
{ 
string username = this.txtName.Text; 
} 

在这种情况下,您会希望将字符串username设置为“John Smith”。 但是,当页面在回发中再次加载时,它实际上重置为“John Jones”。

因此我们必须检查页面是否是回发。

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostback) 
    { 
    this.txtName.Text = "John Jones"; 
    } 
} 

现在,用户名字符串将被设置为“John Smith”,如用户所期望的那样。