CausesValidation = False但仍然发生客户端验证(代码后面生成的控件)

时间:2013-12-05 14:27:50

标签: asp.net vb.net validation dynamically-generated

我有一个带有静态内容(布局,字段等)的asp.net webform,它在后面的代码中创建了一组(图像)按钮。我的静态内容需要字段验证器和自定义验证器。即使我在我的新按钮上设置CausesValidation,当点击时,由于客户端验证问题,页面也不会回发。

按钮是作为sepearte按钮单击事件的一部分创建的(即不作为页面加载事件的一部分)。

    Private Sub CreateButtons_Click(sender As Object, e As EventArgs)
        Dim Btn As New ImageButton()
        Btn.ID = "Something"
        Btn.ImageUrl = "/Images/Something.png"
        Btn.CausesValidation = False
        AddHandler Btn.Click, AddressOf Btn_Click
        ControlToAddTo.Controls.Add(Btn)
    End Sub

    Private Sub Btn_Click(sender As Object, e As EventArgs)
        'Do something
    End Sub

我可以关闭客户端验证来解决此问题,但我不想失去该功能,以防止不必要的往返服务器验证。我已经尝试在页面onload事件中创建按钮,这些工作正常,所以我认为作为页面生命周期的一部分,客户端验证是在onload之后但在任何元素事件被触发之前启动的。

使ReasonValidation = false实际工作的最佳方法是什么??


编辑:页面上其他aspx内容的示例(字段和验证程序):

    Date of Birth: 
    <asp:RequiredFieldValidator ID="RFV_DOB" runat="server" ControlToValidate="DOB" Text=" *" ErrorMessage="Date of Birth is a required field" CssClass="Validation" ValidationGroup="Main" />
    <asp:CompareValidator ID="CV_DOB" runat="server" ControlToValidate="DOB" Operator="DataTypeCheck" Type="Date" Text=" *" ErrorMessage="DOB must be enterred in date format" CssClass="Validation" ValidationGroup="Main" />
    <asp:TextBox ID="DOB" runat="server" CssClass="ST_I" MaxLength="10" />

    Gender:
    <asp:RequiredFieldValidator ID="RFV_Gender" runat="server" ControlToValidate="Gender" Text=" *" ErrorMessage="Gender is a required field" CssClass="Validation" ValidationGroup="Main" />
    <asp:DropDownList ID="Gender" runat="server" CssClass="ST_I">
        <asp:ListItem Selected="True" />
        <asp:ListItem Text="Female" Value="F" />
        <asp:ListItem Text="Male" Value="M" />
        <asp:ListItem Text="Transgender" Value="T" />
        <asp:ListItem Text="Other" Value="O" />
    </asp:DropDownList>

    <asp:Button ID="Send" runat="server" Text="Send Message" style="margin: 20px;" ValidationGroup="Main" />

1 个答案:

答案 0 :(得分:0)

想出来。我不认为这是我看到的客户端验证。我为此感到困惑,因为我的服务器端onclick没有到达。然而问题实际上是在后续回发中重新创建我的动态控件(即图像按钮) - 特别是在这里,用户点击按钮发起的回发。它实际上绕过了客户端验证,但由于我没有在回发时重新创建按钮,因此不知道导致回发的按钮被设置为CausesValidation = false,因此服务器验证被触发。它没有击中onclick,因为它再次没有重新创建,因此不知道导致回发的按钮有一个事件处理程序。

当天的提示,总是在回发时重新创建动态控件!