我使用自定义验证器(在服务器上验证)和一个按钮(它的PostbackUrl =“Page2.aspx”)。
当我按下按钮时,浏览器始终显示Page2,而不检查页面是否有效。
有谁知道如何解决这个问题?
答案 0 :(得分:0)
服务器端验证未执行,因为asp.net添加的“WebForm_DoPostBackWithOptions”onclick事件处理程序会将表单的“action”属性更改为“PostbackURL”按钮属性,在您的情况下为“page2”的.aspx”。这意味着通过传递自定义验证器所在的页面,回发将直接转到“Page2.aspx”,因此它的服务器端验证永远不会触发。但是,无论客户端验证在提交页面之前都会执行。
解决此问题的方法是为按钮添加服务器端点击事件处理程序,如果页面有效,则重定向到该方法的page2,如下所示:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
this.Button1.PostBackUrl = string.Empty;
this.Button1.Click += new EventHandler(this.Button1_Click);
this.CustomValidator1.ServerValidate += new ServerValidateEventHandler(this.CustomValidator1_ServerValidate);
}
void Button1_Click(object sender, EventArgs e)
{
if (this.Page.IsValid)
{
this.Response.Redirect("~/page2.aspx");
}
}
void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
{
// validation logic here
}
}
希望这能回答你的问题。
基思