我有一个带有静态内容(布局,字段等)的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" />
答案 0 :(得分:0)
想出来。我不认为这是我看到的客户端验证。我为此感到困惑,因为我的服务器端onclick没有到达。然而问题实际上是在后续回发中重新创建我的动态控件(即图像按钮) - 特别是在这里,用户点击按钮发起的回发。它实际上绕过了客户端验证,但由于我没有在回发时重新创建按钮,因此不知道导致回发的按钮被设置为CausesValidation = false,因此服务器验证被触发。它没有击中onclick,因为它再次没有重新创建,因此不知道导致回发的按钮有一个事件处理程序。
当天的提示,总是在回发时重新创建动态控件!