好的。让我问的问题是这样的: 一般地,不是页面周期:回发问题
的Page_Load
的onclick和/或提交处理
的Page_Load。
如果是这样,在onclick/submit处理程序期间页面上的控件的值应该是什么?用户选择的值,或来自page_load的值?
好的。让我问的问题是这样的: 一般地,不是页面周期:回发问题
的Page_Load
的onclick和/或提交处理
的Page_Load。
如果是这样,在onclick/submit处理程序期间页面上的控件的值应该是什么?用户选择的值,或来自page_load的值?
页面加载事件触发之前控制事件。因此,如果您在页面加载事件中更改值,那么这些更改将覆盖用户选择的任何值,并且在控件事件中,您将看到在页面加载中设置的值。
如果你需要做一些初始化的页面加载事件,但只有当有人来的页面,第一次,你可以使用的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还有更多的细节。
下面是一个简单的例子序列:
发送回浏览器这要看。
请考虑以下示例 - 系统用户有机会在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”,如用户所期望的那样。
也许我说错了。页面加载事件每次页面加载时触发是不是真的?即使在任何提交事件处理程序启动后? IE: 1.用户请求页面(URL) 2. Web服务器处理页面触发Page_Load作为该过程的一部分。 3.用户与页面上的表单进行交互,更改控件中的某些值。 4.用户单击某个按钮或执行一些将页面提交回服务器的操作。 5.服务器再次处理页面(用户更改等) 现在,page_load事件不会再次触发吗?而且,基本上开始整个过程? – john 2010-06-19 15:14:17
是的,每个HTTP请求(包括用户操作引起的初始和每次回发)都会导致页面加载事件触发。如果您希望自己的行为有所不同,IsPostBack会告诉您如何区分第一个请求和后续回发。 – 2010-06-19 15:43:51
ASP.NET有很长的事件列表,可以触发并为每个页面请求执行特定的事情。请阅读http://aspalliance.com/134 – Bill 2010-12-15 20:46:00