我的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的修复程序,它不是很干净,但确实有效。我原本以为只做假原因验证就足够了。也许我错了。
我有一个脚本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;
});
});
答案 0 :(得分:1)
这是因为您将焦点设置在文本框上。当焦点离开文本框时,它会触发验证。要么不将焦点设置在文本框上,要么在TextBox上设置CuasesValidation = False。后一个选项的问题是,在相同验证组中的其他内容触发验证之前,它不会验证文本框。