初学ajax,请教大家一个问题 在线等 解决立即给分

beyondzxn 2007-12-11 10:34:38
在设计登录的时候遇到了这样的一个问题,页面中有一个TextBox,输入用户名,一个dropdownList,选择用户名对应的员工名,(这里用到了ajax,在填写用户名后,立即出现该用户名对应的所有员工名),还有一个输入密码的textbox.
问题是这样的:当用户名,员工名,密码都正确的时候会跳转到主页面,没有问题,但是用户名,员工名,密码不正确的时候,我会通过alert提示"员工名或密码不正确",之后仍然留在本页(Default.aspx),这是问题就出现了,无论怎样修改用户名,DropdownList中的员工名不再出现,下拉列表一直为空,不知道如何解决.
代码如下


public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Request.Cookies["UserSettings"] != null)
{
Session["UserName"] = Request.Cookies["UserSettings"]["UserName"];
Response.Redirect("main.aspx");//跳转到主页面
}

}
protected void Button1_Click(object sender, EventArgs e)
{
String UserName = this.UserName.Text.Trim().ToString();
String Password = this.Password.Text.Trim().ToString();
if (ClassDate.CheckStringLength(UserName, 20) == false) //检查用户名是否合法
{
Response.Write("<script>alert('非法用户名!用户名最大长度为20,不能包含非法字符单引号、双引号、分号或斜线。');</script>");
}
if (ClassDate.CheckStringLength(Password, 20) == false) //检查密码是否合法
{
Response.Write("<script>alert('非法密码!密码最大长度为20,不能包含非法字符单引号、双引号、分号或斜线。');</script>");
}

//检查用户名和密码是否正确
if (ClassLocalDB.DataExist("员工基本信息", "用户编号", UserName,
"员工姓名", Request.Form["Customer"].ToString(), "登录密码", this.Password.Text.ToString()))
{
if (this.Remenber.Checked == true)
{
HttpCookie myCookie = new HttpCookie("UserSettings");
myCookie["UserName"] = UserName;
myCookie.Expires = DateTime.Now.AddDays(1d);
Response.Cookies.Add(myCookie);
}
Session["UserName"] = UserName;
Session["Password"] = ClassDate.DataEncode(Password);
Session["Staff"] = Request.Form["Customer"].ToString();
Response.Redirect("Login.aspx");
}
else
{
Response.Write("<script>alert('员工或密码有误!')</script>");
}
}

}




var request = false;
//创建新的 XMLHttpRequest 对象
try {
request = new XMLHttpRequest();
} catch (trymicrosoft) {
try {
request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (othermicrosoft) {
try {
request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (failed) {
request = false;
}
}
}
if (!request)
{
alert("Error initializing XMLHttpRequest!");
}

//发送请求
function getCustomerInfo()
{
var UserName = document.getElementById("UserName").value;
var url = "getCustomerInfo.aspx?UserName=" + UserName;
request.open("GET", url, true);
request.onreadystatechange = updatePage;
request.send(null);
}

//获得数据后,在本页进行处理
function updatePage()
{
if (request.readyState == 4)
{
if (request.status == 200)
{
//清空原下拉框
document.getElementById("Customer").options.length = 0;
//str为返回的一个字符串,形式为"员工1,员工2,..."
var str = request.responseText;

if(str == 'error')
{
document.getElementById("Customer").options.add(new Option("用户名不存在,请检查",0));
document.getElementById("Customer").Enable = false;
}
else
{

//将该字符串分割为数组形式
var strs=str.split(',');
for(var i=0;i<strs.length;i++)
{
//获得员工姓名
var Customer = strs[i];
//绑定到下拉框
document.getElementById("Customer").options.add(new Option(Customer));
//document.getElementById("Customer1").options.add(new Option(Customer,i));

}
}
}
else
{
alert("status is " + request.status);
}
}

}
...全文
126 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuzeguo 2008-01-14
  • 打赏
  • 举报
回复
学习!
beyondzxn 2007-12-11
  • 打赏
  • 举报
回复
输入用户名的Textbox中的 onblur事件触发的
blestcc 2007-12-11
  • 打赏
  • 举报
回复
getCustomerInfo是怎样触发的?
beyondzxn 2007-12-11
  • 打赏
  • 举报
回复
依然没有解决
up
beyondzxn 2007-12-11
  • 打赏
  • 举报
回复
不太明白,能说具体点吗?
whoo529 2007-12-11
  • 打赏
  • 举报
回复
页面回发后要把dropdownlist放在!page.isbostbock
beyondzxn 2007-12-11
  • 打赏
  • 举报
回复
问题解决了,谢谢大家
最后是这样解决的:
在URL后面加了一个随机数,由于缓存存在,所以请求得不到真正发送
并且把onchange事件改为onblur事件

还是自己学艺不精啊,^_^

结贴加分
Jeremiah 2007-12-11
  • 打赏
  • 举报
回复
用.net的dropdownlist在点击登录按钮后回报一个回发的错误
1. 把dropdownlist放在!page.ispostback里面看看会不会有错误.



2. var strs=str.split(',');
for(var i=0;i <strs.length;i++)
{
//获得员工姓名
var Customer = strs[i];
//绑定到下拉框
document.getElementById("Customer").options.add(new Option(Customer));
//document.getElementById("Customer1").options.add(new Option(Customer,i));
}

检查一下,你回调的值是什么,有没有执行这段代码....


3. 既然已经Ajax了,就做的更Ajax一点.用一个<div id="notice"></div> notice.innerHTML="红色的提示信息";
beyondzxn 2007-12-11
  • 打赏
  • 举报
回复
lye2000000_super 能不能说的详细点
验证用户名和密码是在后台代码中运行的,通过ajax只是取得了用户名对应的多个员工姓名,验证时是通过用户名,员工姓名和密码三者同时验证的。
如果不通过Response.Write("<script>alert('员工或密码有误!')</script>");提示登录失败
还有什么方法呢?
beyondzxn 2007-12-11
  • 打赏
  • 举报
回复
to w59879213
用.net的dropdownlist在点击登录按钮后回报一个回发的错误
所以我把它改成下拉列表了
to
lye2000000_super

我试试看
  • 打赏
  • 举报
回复
还有种方法就是你在dody的onload事件里调用一个方法,根据你的结果不同修改客户端的这个方法
  • 打赏
  • 举报
回复
你这个过程就有问题吧?你不应该往Response里写,你这么写把响应改变了,你应该把这个传到画面上,在body的onload事件里弹出提示。用ClientScriptManager.RegisterStartupScript里把你的要显示的加进去,如果验证过了那就什么都不用加,这样应该能解决你的问题。
Jeremiah 2007-12-11
  • 打赏
  • 举报
回复
var strs=str.split(',');
for(var i=0;i<strs.length;i++)
{
//获得员工姓名
var Customer = strs[i];
//绑定到下拉框
document.getElementById("Customer").options.add(new Option(Customer));
//document.getElementById("Customer1").options.add(new Option(Customer,i));
}
这个是绑定你员工姓名的下拉列表???还是说你用的.net的dropdownlist控件?
beyondzxn 2007-12-11
  • 打赏
  • 举报
回复
upup

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧