页面验证,提交按钮不是usercontrol的一部分

时间:2010-09-15 08:07:40

标签: asp.net validation

我有一些要在服务器上验证的字段(CustomValidator),它位于一个单独的用户控件中,而我的提交按钮位于不在用户控件中的页面中。

我所做的是,我将所有验证方法放在我的usercontrol(ascx.cs)后面的代码中,页面验证位于页面后面的代码中(aspx.cs)。我把它们放在相同的ValidationGroupName(字段和提交按钮)中。 usercontrol(ascx)是我的页面的子项(aspx)。我已将CauseValidation="true"放置到我的按钮和UseSubmitBehavior="true"。问题是它没有验证。这可能是什么问题?

注意:我无法将Button作为usercontrol的一部分。

编辑:

在我的aspx页面中,按钮的click事件有this.Page.Validate(ValidationGroupName),我的所有验证器都在一个单独的控件(ascx)上的字段上,该控件是aspx页面的子项。

protected void Button1_Command(object sender, CommandEventArgs e)
{
    if(e.CommandName.Equals("Validate", StringComparison.Ordinal))
    {
        this.Page.Validate("MyValidationGroup");
        if(this.Page.IsValid)
        {
            // I'll change my View here.
        }
    }
}

我的按钮看起来像

<asp:Button ID="Button1" runat="server" UseSubmitBehavior="true" CommandName="Validate" 
                    Text="Submit" OnCommand="Button1_Command" CausesValidation="true" ValidationGroup="MyValidationGroup" />

上面的代码段位于我的aspx页面中。

我试图在ascx页面上放置相同的按钮,它工作正常。我的想法是因为ascx页面在aspx页面下。当触发aspx页面上的按钮事件(Button1)时,不会触发ascx页面中的其余事件。我试图在按钮事件和验证器事件上放置断点,如果页面的按钮(aspx)是我点击的那个,它将不会停止在我的验证器事件上,如果控件上的按钮(ascx)我单击它将停止验证器事件。对此可以采取什么补救措施?

1 个答案:

答案 0 :(得分:2)

您是否尝试在按钮点击事件中调用ucName.Page.Validate();

(其中ucName是您在标记中称为用户控件的任何内容)

编辑:确定以下这个简单的代码对我来说运行正常,我打破验证的唯一方法就是将我的用户控件设置为visible = false;你能发布更多的代码吗?

父页面标记:

<uc:ucTest id="ucName" runat="server">
<asp:Button ID="btnTest" runat="server" Text="Test validation" onclick="btnTest_Click" />
代码背后的代码:

protected void btnTest_Click(object sender, EventArgs e)
{
    if (Page.IsValid)
    {
        Response.Write("Hi!");
    }
}

用户控制标记:

<asp:TextBox ID="txtDummy" runat="server"></asp:TextBox>
<asp:CustomValidator ID="CustomValidator1" runat="server" 
     ErrorMessage="*"
     ControlToValidate="txtDummy" 
     onservervalidate="CustomValidator1_ServerValidate">
</asp:CustomValidator>
代码背后的代码:

protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
{
    if (txtDummy.Text.Length > 0)
    {
        args.IsValid = false;
    }
}