ASP.Net textbox OnTextChanged激发,即使验证无效
以下是我的代码的简单版本:ASP.Net textbox OnTextChanged激发,即使验证无效,asp.net,validation,webforms,Asp.net,Validation,Webforms,以下是我的代码的简单版本: <asp:TextBox ID="textBox" runat="server" AutoPostBack="true" OnTextChanged="textChanged" CausesValidation="true" ValidationGroup="valGroup"></asp:TextBox> <asp:RegularExpressionValidator ID="regEx" runat="server" ControlT
<asp:TextBox ID="textBox" runat="server" AutoPostBack="true" OnTextChanged="textChanged" CausesValidation="true" ValidationGroup="valGroup"></asp:TextBox>
<asp:RegularExpressionValidator ID="regEx" runat="server" ControlToValidate="textBox" ValidationGroup="valGroup" ErrorMessage="Not a valid number." Display="Dynamic" ValidationExpression="(^0*[1-9]+\d*(\.\d+)?$)|(^0*\.0*[1-9]+\d*$)" />
<asp:Button ID="btnSave" runat="server" Text="Save" OnClick="btnSaveClick" ValidationGroup="valGroup" />
<asp:Button ID="btnCancel" runat="server" Text="Cancel" OnClick="btnCancelClick" CausesValidation="false" />
我切换了cancel按钮以调用JavaScript方法来尝试清除文本框。结果有点有趣
当输入无效字符串作为第一件事时,“取消”按钮工作正常。它在不调用textChanged()
的情况下清除文本框
如果我键入一个有效的数字,textChanged()
将按预期调用。但是,当我单击cancel按钮时,它确实调用了cancel()
,然后立即再次调用textChanged()
,但现在文本框为空,导致异常
如果我输入有效的内容,然后使其无效,则会发生类似的情况<为有效输入调用code>textChanged()。添加不正确的输入时,验证程序会阻止调用textChanged()
。但当我单击cancel时,它会从cancel()
变为textChanged()
我在想,可能是因为验证器不会在回发过程中保持不变,但是使用JavaScript函数cancel()
按钮无法导致页面回发textChanged()
一定是原因,但我不知道怎么做
编辑2:我不打算将此标记为已解决,因为在我看来这仍然是一个巨大的问题,但我找到了一个解决方法
<script>
function cancel() {
document.getElementById('<%=textBox.ClientID%>').value = "";
return false;
}
</script>
<asp:Button ID="btnCancel" runat="server" Text="Cancel" OnClientClick="return cancel();" CausesValidation="false" />
函数cancel(){
document.getElementById(“”).value=“”;
返回false;
}
这不允许按钮在任何情况下导致回发。它正在修复一些本来不应该存在的东西,但它确实存在
这有助于按钮点击,但对其他事情没有帮助。我有一个GridView,服务器端有一个OnSelectedIndexChanged函数。它还会导致页面使用
textChanged()
函数发回。我可以尝试创建GridView函数的JavaScript版本,并像取消按钮一样修复它,但在这个阶段,我可能会删除ContextChanged事件处理程序,并将textChanged()
函数放在按钮后面。add causesvalidation=“true”在textbox控件上对我有效 如此接近。。。只需在“取消”按钮上为ValidationGroup
名称设置一个专用名称即可。这将导致它与其余的验证一起被处理出周期。没有有效地设置它会将其放入“默认”验证组,其行为(如您所见)有点奇怪
要允许取消按钮免于表单验证的其余部分,我通常应用的规则是[ValidationGroupName]Cancel
,以确保它在验证块之外触发。在这种情况下,将“取消”按钮设置为类似
<asp:Button ID="btnCancel" runat="server" Text="Cancel" ValidationGroup="valGroupCancel" OnClick="btnCancelClick" />
应该给出您的预期行为。很抱歉,如果您查看我的示例代码,我的文本框中已经有causesvalidation=“true”。我刚刚运行了它,但它仍然不工作。
<asp:Button ID="btnCancel" runat="server" Text="Cancel" ValidationGroup="valGroupCancel" OnClick="btnCancelClick" />