日期:2014-05-18  浏览次数:20688 次

Page_load为什么自动重复进行?
该怎么说好呢??

下面一个生成验证码的字符串的代码,验证码图片产生的代码就不贴了
C# code

public partial class Login : System.Web.UI.Page
{
  private static string sValidator = "";
  private readonly string sValitorImageUrl = "ValidateImage.aspx?Validator=";
  private StringBuilder LetterList = new StringBuilder();//可变字符串,用于生成验证码
   

  protected void Page_Load(object sender, EventArgs e)
  {
  lab_RegistID.Text = Session["RegistID"].ToString();
  if (!Page.IsPostBack)
  {
  sValidator = CreatValitedateString(6);
  ValidateImageLo.ImageUrl = sValitorImageUrl + sValidator;
  compValidator = sValidator;
  }
  }

  private int GetRandomint(int min, int max)//获取基础字符串的随机数位
  {
  Random random = new Random();

  return (random.Next(min, max));

  }

  private void GetLeterlist()//创建验证码的基础字符串
  {
  for (int i = 0; i < 10; i++)
  {
  LetterList.Append(i.ToString());

  }
  for (int i = 0; i < 26; i++)
  {
  LetterList.Append(((char)(i + (int)'a')).ToString());
  }
  for (int i = 0; i < 26; i++)
  {
  LetterList.Append(((char)(i + (int)'A')).ToString());
  }


  }

  private string CreatValitedateString(int n)
  {
  GetLeterlist();

  StringBuilder vs = new StringBuilder();
  for (int i = 0; i < n; i++)
  {
  int index = GetRandomint(0, LetterList.Length - 1);
  vs.Append(LetterList[index].ToString());
  LetterList.Remove(index, 1);
  }
  return (vs.ToString());

  }
  protected void btn_Login_Click(object sender, EventArgs e)
  {

  if (txt_VlidateNum.Text != sValidator)
  {
  lab_ValidateMsg.Text = "请输入正确的验证码!";
   

  return;

  }
  else
  {
  Response.Redirect("~/HomePage.aspx");
  }
   

   
  }
}


情况是这样的:
进行断点测试,断点位置有:load代码全部,和 btn_Login_Click事件的if判断

当登录页面打开,load过后,sValidator有一个6位字符串,如:123456

然后弹出页面了,这时我在验证码框填入123456,然后按登录按钮

奇怪的是,又调回load代码了,接着sValidator理所当然就变了,下面的if判断根本通过不了

为什么我登录按钮的click事件会重新触发load,找了很久,还是一头雾水啊


请各为耐心看看我的问题,谢了

------解决方案--------------------
直接原因:page_load里的IsPostBack判断
根本原因:LZ对页面生命周期不清晰 ,这个需要网上搜一下,很多的,对于ASP.NET很重要。
------解决方案--------------------
点击按钮的时候,页面回发,验证码又重新加载了一次,所以又走了一次PageLoad,同时验证码了变了。
解决方法:把生成验证码的方法不放在登录页面中,放在另外的页面或.ashx这样的文件里。


------解决方案--------------------
有可能是这个原因了
 if (!Page.IsPostBack)
{}

一般是这样写的
 if (!IsPostBack)//调用base.IsPostBack
{
楼主把这个去掉看下。
------解决方案--------------------
如果把 按钮btn_Login 和 文本框txt_VlidateNum 放在同一个页面,应该是没问题的