asp.net中缺少if(!Page.IsPostBack)引起的错误
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