我有一个用来修改password的页面,里面有一个CustomValidator在服务器端检查用户填写的email和旧的password是否合法。然后如果Page.IsValid,就把新的password更新到数据库,然后javascript:alert()通知用户密码更新成功。但现在这个页面出了点问题,就是在密码被更新之后,页面又在进行了一次Page.Validate,然后显示旧的password错误,其实是password已被更新。主要有关的部分如下:private void Page_Load(object sender, System.EventArgs e)
{
if (Page.IsPostBack)
{
Page.Validate();
\\这里的检查证明Page.IsValid=true了才更新password的。
if (Page.IsValid)
{
dataProvider.Execute(@"Update [User] Set [TimeStamp]=Now, UserPassword='"+FormsAuthentication.HashPasswordForStoringInConfigFile(txtNewPassword.Text,"md5").Replace("'","''")+"' Where UserEmail='"+txtEmail.Text.Replace("'","''")+"' And UserPassword='"+FormsAuthentication.HashPasswordForStoringInConfigFile(txtOldPassword.Text,"md5").Replace("'","''")+"'");
Response.Write(@"<script language=""javascript"">alert(""Password updated."");</script>");
}
}
}\\这是验证旧password是否正确的过程。
private void cvEmailPassword_ServerValidate(object source, System.Web.UI.WebControls.ServerValidateEventArgs args)
{
DataSet ds=dataProvider.Query(@"Select UserEmail From [User] Where UserEmail='"+txtEmail.Text.Replace("'","''")+"' And UserPassword='"+FormsAuthentication.HashPasswordForStoringInConfigFile(txtOldPassword.Text,"md5").Replace("'","''")+"'");
if (ds.Tables[0].Rows.Count==0)
args.IsValid=false;
else
args.IsValid=true;
}
{
if (Page.IsPostBack)
{
Page.Validate();
\\这里的检查证明Page.IsValid=true了才更新password的。
if (Page.IsValid)
{
dataProvider.Execute(@"Update [User] Set [TimeStamp]=Now, UserPassword='"+FormsAuthentication.HashPasswordForStoringInConfigFile(txtNewPassword.Text,"md5").Replace("'","''")+"' Where UserEmail='"+txtEmail.Text.Replace("'","''")+"' And UserPassword='"+FormsAuthentication.HashPasswordForStoringInConfigFile(txtOldPassword.Text,"md5").Replace("'","''")+"'");
Response.Write(@"<script language=""javascript"">alert(""Password updated."");</script>");
}
}
}\\这是验证旧password是否正确的过程。
private void cvEmailPassword_ServerValidate(object source, System.Web.UI.WebControls.ServerValidateEventArgs args)
{
DataSet ds=dataProvider.Query(@"Select UserEmail From [User] Where UserEmail='"+txtEmail.Text.Replace("'","''")+"' And UserPassword='"+FormsAuthentication.HashPasswordForStoringInConfigFile(txtOldPassword.Text,"md5").Replace("'","''")+"'");
if (ds.Tables[0].Rows.Count==0)
args.IsValid=false;
else
args.IsValid=true;
}
解决方案 »
- 关于girdview 导出 excel
- 我在gridview里面写了一个按钮,这个按钮怎么样才能根据这行的ID来处理该行的数据。
- 请大家帮忙一下 谢谢 关于类型转换的!谢谢
- ASP.NET 确认框问题,急!!!
- 如何在下拉菜单中以树形显示
- asp.net控件问题!!
- DropDownList 在GridView 里 通过后台动态加入项目错误
- 读ini文件问题-仅仅是读,写可以的----急
- 求一个只能输入正整数或者带4位小数的正则表达市
- 关于用Table做DataGrid里模版列,ID的问题
- 服务器控件如何获取/传递clientWidth/offsetWidth这样的属性?
- 如何对RichText编辑器返回的HTML内容进行安全性处理?
{
if (Page.IsValid)
{
//////
}
}
明明已经显性调用了一次Page.Validate(),而且也通过了,才更新数据库的password的,而且javascript:alert()也显示了,理论上也就应该这样完成这次请求。
但之后肯定又被隐性的调用了一次Page.Validate(),于是cvEmailPassword的警告信息被显示出来了,这到底是怎么回事呢?是什么又驱动了一次Page.Validate()呢?而且是在if (Page.IsValid)语句之后。
{
Page.Validate();
\\这里的检查证明Page.IsValid=true了才更新password的。
if (Page.IsValid)
{
Page_Loae(Object sender,EventArgs e)方法可由页面的很多动作来引发,只要有EventArgs的事件源,就有可能引发。