该怎么说好呢??下面一个生成验证码的字符串的代码,验证码图片产生的代码就不贴了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,找了很久,还是一头雾水啊
请各为耐心看看我的问题,谢了
{
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,找了很久,还是一头雾水啊
请各为耐心看看我的问题,谢了
public string Text
{
get { return (string)ViewState["Text"]; }
set { ViewState["Text"] = value; }
}
用ViewState保存当前页面变量状态。不要用session...session除了保存当前登录信息,基本能不用就不用。
不明白啊,就是判断Session["RegistID"]是不是NULL就行了?
那个load的问题解决了但,又有个不懂的:
就是 我用一个LinkBtton想来执行刷新验证码的
但是clik事件没发生前,RequiredFieldValidator就提示验证码不能为空了
应该怎么做?才能绕开?
但是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" />
private string sValidator
{
get
{
object obj = this.ViewState["sValidator "];
return ViewState["sValidator "] == null ? "" : obj.ToString();
}
set
{
ViewState["sValidator "] = value;
}
}
可以放在ViewState里面保存,代码如上
<script type="text/javascript">
function Change() {
var a = "<%=CreatValitedateString(6)%>";
document.getElementById("ValidateImage").src = "ValidateImage.aspx?Validator=" + a;
}
</script>
你应该
<script type="text/javascript">
function Change() {
var a = document.getElementById("ValidateImage").src;
if(a.indexOf("&")>-1) a = a.split("&")[0]
document.getElementById("ValidateImage").src = a + "&tmp=" + (new Date()).valueOf();
}
</script>