跨页发布&自定义验证器

时间:2010-03-05 16:57:17

标签: c# asp.net

我使用自定义验证器(在服务器上验证)和一个按钮(它的PostbackUrl =“Page2.aspx”)。

当我按下按钮时,浏览器始终显示Page2,而不检查页面是否有效。

有谁知道如何解决这个问题?

1 个答案:

答案 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
    }
}

希望这能回答你的问题。

基思