代码之家  ›  专栏  ›  技术社区  ›  rob waminal

页面验证,提交按钮不是用户控件的一部分

  •  0
  • rob waminal  · 技术社区  · 14 年前

    我所做的是,我将所有验证方法放在usercontrol后面的代码中(ascx.cs公司)页面验证在页面的代码后面(在后台). 我将它们放在同一个ValidationGroupName(字段和提交按钮)中。用户控件(ascx)是我的页面(aspx)的子级。我已经安排好了 CauseValidation="true" 我的按钮和 UseSubmitBehavior="true" . 问题是它无法验证。这里面有什么问题?

    注: 我不能把按钮作为用户控件的一部分。

    编辑:

    在我的aspx页面中,单击按钮的事件 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 回复  |  直到 4 年前
        1
  •  2
  •   JumpingJezza    14 年前

    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;
        }
    }