У меня проблема с проверкой причин на кнопке ссылки на странице aspx. У меня есть страница с двумя текстовыми полями, некоторыми элементами управления проверкой и кнопкой отправки. Элементы управления проверкой имеют включенный клиентский сценарий true и имеют группы проверки. Моя кнопка с изображением asp имеет назначенную группу проверки и вызывает проверку, равную true. Я установил фокус на мое первое текстовое поле.
Моя кнопка ссылки - нажмите здесь, чтобы узнать больше о ....., и я указал группу проверки и установил для проверки значение false. В Chrome все отлично работает. В IE, если либо щелкнуть в любом месте на странице, кроме кнопки «Отправить», либо нажать кнопку «Моя ссылка», мое первое текстовое поле проверяется и отображается ошибка. Теперь, если я снова нажму на кнопку ссылки, я перенаправлюсь на нужную мне страницу.
Мне это кажется немного странным, у кого-нибудь есть идеи?
Итак, как мне это исправить, чтобы IE не проверял, пока не нажата только кнопка отправки.
Вот как выглядит мой код:
<span>Value 1:</span>
<asp:TextBox ID="Value1TextBox" runat="server" />
<asp:RequiredFieldValidator ID="Value1_1_Validator" EnableClientScript="true" ControlToValidate="Value1TextBox" Display="Dynamic" ForeColor="Red" Text="is required" ValidationGroup="MyValGroup" runat="server" />
<asp:RegularExpressionValidator ID="Value1_2_Validator" EnableClientScript="true" ControlToValidate="Value1TextBox" ValidationExpression="\somevalexpression\" Display="Dynamic" ForeColor="Red" Text="is not valid" ValidationGroup="MyValGroup" runat="server" />
...
<span>Value 2:</span>
<asp:TextBox ID="Value2TextBox" runat="server" />
<asp:RequiredFieldValidator ID="Value2_1_Validator" EnableClientScript="true" ControlToValidate="Value2TextBox" Display="Dynamic" ForeColor="Red" Text="is required" ValidationGroup="MyValGroup" runat="server" />
...
...
<asp:ImageButton ID="SubmitButton" ImageUrl="~/Images/submit.png" OnClick="SubmitButton_Click" ValidationGroup="MyValGroup" CausesValidation="true" runat="server" />
...
<asp:LinkButton ID="OurPolicyLink" PostBackUrl="~/Policy.aspx" ValidationGroup="MyValGroup" CausesValidation="false" Text="click here" runat="server" />
Я придумал исправление с использованием jquery и javascript, оно не такое чистое, но оно работает. Я бы подумал, что достаточно просто выполнить проверку причин, равную false. Возможно, я был неправ.
У меня есть файл сценария javascript, вот как это выглядит.
$(function () {
$"[id$=_Value1TextBox]").focus();
$("[id$=_Validator]").each(function () {
$(this)[0].enabled = false;
});
$("[id$=_SubmitButton]").click(function () {
$("[id$=_Validator]").each(function () {
$(this)[0].enabled = true;
});
Page_ClientValidate("MyValGroup");
if (!Page_IsValid) {
return false;
}
return true;
});
});