asp.net中缺少if(!Page.IsPostBack)引起的錯誤
1。驗證碼錯誤
驗證碼一般是在Page_Load事件裡直接產生,或是調用函數產生的,如果你沒有把產生驗證碼的代碼放在if(!Page.IsPostBack)裡面,那當你點登陸等按鈕時,將永遠也登陸不了,你仔細檢查發現登陸代碼並沒有,但就是登陸不了,如果跟蹤,你會發現,你填入的驗證碼和程式產生的驗證碼會不同,但是在登陸的時候,你明明填的是正確的驗證碼,哈哈,這總問題要是沒有經驗,真是會搞的頭暈。這裡我給大家解釋一下為什麼點登陸的時候得到驗證碼會不同。
當你點登陸按鈕的時候,一般人以為會直接執行登陸按鈕的事件代碼,其實錯誤就在這裡,點登陸的時候,首先執行的是Page_Load的代碼,也就是說,無論你什麼時候點按鈕,首先執行的是Page_Load事件裡的代碼,然後才執行按鈕對應的事件代碼,所以,當你點登陸時,由於它執行了Page_Load裡的代碼,使得驗證碼重建了,而你填入的驗證碼是不會變的,結果一比較兩個驗證碼(一個你填的,一個重建的),當然就不同了。此種問題,只要將產生驗證碼的代碼放在if(!Page.IsPostBack)裡面就可以解決了,放在裡面後,當你查看頁面時,點登陸按鈕,就不會再執行這裡面的代碼了。
2。得不到下拉式功能表的值
一般DropDownList控制項裡的內容,也是在Page_Load裡通過代碼添加的,如果這些代碼沒有放在沒有if(!Page.IsPostBack)裡,那麼點登陸等按鈕時,下拉式功能表中的內容又會重建,所以無論你選了哪一項,都只能得到第一項的值,解決方案同上個問題,原理相同,這裡就不解釋了。
樣本
代碼
1 using System;
2 using System.Data;
3 using System.Configuration;
4 using System.Web;
5 using System.Web.Security;
6 using System.Web.UI;
7 using System.Web.UI.WebControls;
8 using System.Web.UI.WebControls.WebParts;
9 using System.Web.UI.HtmlControls;
10 public partial class _Default : System.Web.UI.Page
11 {
12 protected void Page_Load(object sender, EventArgs e)
13 {
14 if (!IsPostBack)
15 {
16 this.Label1.Text = DateTime.Now.ToLongDateString();
17 this.Panel2.Visible = false;
18
19 }
20 }
21 protected void Button1_Click(object sender, EventArgs e)
22 {
23 if (this.TextBox1.Text.Trim() != "")
24 {
25 Response.Redirect("Default2.aspx?UserName="+TextBox1.Text.Trim());
26 }
27
28 }
29 protected void LinkButton1_Click(object sender, EventArgs e)
30 {
31 this.Panel1.Visible = false;
32 this.Panel2.Visible = true;
33 }
34 }
35
36 Default2.aspx內容
37 using System;
38 using System.Data;
39 using System.Configuration;
40 using System.Collections;
41 using System.Web;
42 using System.Web.Security;
43 using System.Web.UI;
44 using System.Web.UI.WebControls;
45 using System.Web.UI.WebControls.WebParts;
46 using System.Web.UI.HtmlControls;
47 public partial class Default2 : System.Web.UI.Page
48 {
49 protected void Page_Load(object sender, EventArgs e)
50 {
51 if (Request["UserName"] != null)
52 {
53 this.Label1.Text = Request["UserName"].ToString();
54 }
55
56 }
57 }
58