当前位置: 代码迷 >> ASP.NET >> 页面load完后,参数的值就没了
  详细解决方案

页面load完后,参数的值就没了

热度:7395   发布时间:2013-02-25 00:00:00.0
页面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,找了很久,还是一头雾水啊


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

------解决方案--------------------------------------------------------
1.首先这个问题应该是不会出现的,因为服务器按钮回发的确可以导致页面重新加载,然而Page.IsPostBack如果是控件触发的话应该已经为True,进不到判断,因此sValidator 应该还是第一次页面加载时候创建的字符

2.验证码放在全局变量里本身就是错误的,多用户访问肯定会造成混乱,验证码一般保存在Session中,每产生一个会话,也就相应产生该会话的验证码,会话之间互不影响
------解决方案--------------------------------------------------------
C# code
public string Text {        get { return (string)ViewState["Text"]; }        set { ViewState["Text"] = value; }}
------解决方案--------------------------------------------------------
我用一个LinkBtton想来执行刷新验证码的
但是clik事件没发生前,RequiredFieldValidator就提示验证码不能为空了
应该怎么做?才能绕开?
=====
其实不用linkbutton来刷新 用啊

function DianJi()//刷新验证码
{ document.getElementById("yan").src = "../include/ValidateCode.aspx" + "?" + Math.random(); }

<img id="yan" alt="刷新验证码" style=" cursor:pointer" onclick="javascript:DianJi();" src="../include/ValidateCode.aspx" />

------解决方案--------------------------------------------------------
验证码的生成是在ValidateImage.aspx页面里的。在其他页面的无效
  相关解决方案