我遇到了与此处描述的相同的问题。
只有问题被标记为已回答,仅解释为什么在输入字段上使用 RequiredFieldValidator 时可能必须单击两次 - 一次是因为文本框的模糊(例如)将更正验证,然后再次实际发布形式。
我不想点击一个按钮两次!有谁知道解决方案或解决方法?
我遇到了与此处描述的相同的问题。
只有问题被标记为已回答,仅解释为什么在输入字段上使用 RequiredFieldValidator 时可能必须单击两次 - 一次是因为文本框的模糊(例如)将更正验证,然后再次实际发布形式。
我不想点击一个按钮两次!有谁知道解决方案或解决方法?
您可以添加EnableClientScript=false
到验证器。
这会阻止客户端验证,因此您将始终得到回发(尽管这可能不是您想要的)。验证仍将完成,只是在服务器端。
请务必将按钮单击逻辑包装在 a 中if (Page.IsValid) { ... }
,以检查验证器的状态。
抱歉之前没有发布代码,我认为这是 . 的标准问题RequiredFieldValidator
,但后来意识到我的特定问题来自CompareValidator
,用于确保输入的密码匹配。
CompareValidator 导致了我所描述的问题,导致我必须单击离开字段以进行模糊和验证,然后才能单击发布按钮。
我不知道为什么,但是将显示CompareValidator
从动态更改为静态已经解决了问题。
如果验证器是 Display="Dynamic",并且错误消息的出现导致提交按钮移动,则提交按钮不会收到 MouseUp 事件。在这种情况下,验证会触发并清除错误消息,但不会触发提交按钮。要解决此问题,请将验证器设置为 Display="Static",或者重新排列表单,以便在出现错误消息时提交按钮不会移动。
这是一种为动态验证消息保留大约一个垂直线空间的方法:
<div style="height:1.5em;overflow:visible;">
<asp:RequiredFieldValidator ID="R1" runat="server"
ErrorMessage="Name is required" ControlToValidate="TextBoxName"
Display="Dynamic"></asp:RequiredFieldValidator>
</div>
我发现没有必要设置 EnableClientScript="false",尽管这对未实现客户端验证功能的 CustomValidator 确实有帮助。
发布您的代码始终是一个好主意,这样我们就可以在测试环境中运行您的代码并对其进行修改以确保它在发布我们的答案之前工作。
我建议添加
causesValidation="true"
到您的按钮,看看是否有效。
这是对我来说工作正常并有助于摆脱双击的代码。
<asp:TextBox ID="TextBox1" runat="server" autocomplete="off"
Enabled="true" MaxLength="20" onfocus="SetActiveControl(this);" Text=""
CausesValidation="true" />
<asp:RequiredFieldValidator ID="RequiredFieldValidator1"
runat="server" ControlToValidate="TextBox1" Display="Static" ErrorMessage="Ha!" SetFocusOnError="True" EnableClientScript="true" ForeColor="" InitialValue="" />
我有一个更好的主意。
将 Text="" 添加到文本框控件。
将 InitialValue="" 添加到验证器控件。
它会做什么,当它发布时,它会发现文本框的值仍然是初始值,它会抛出错误并且不会发布表单。
尝试这个:
<asp:RequiredFieldValidator ID="reqFieldCloseComment" ControlToValidate="tbCloseComment" ValidationGroup="ChangeStatus" ErrorMessage="Please enter a reason" Display="Dynamic" runat="server" InitialValue=""></asp:RequiredFieldValidator>
<asp:TextBox ID="tbCloseComment" runat="server" CausesValidation="true" TextMode="MultiLine" Height="107px" Width="400px" Text=""></asp:TextBox>
<asp:Button ID="btnCloseRequestFinal" Text="Finish" CssClass="CloseReqButton" runat="server" ValidationGroup="ChangeStatus" />
$(function() {
$("input.btn").on("click",function(){
if(Page_BlockSubmit == true) {Page_BlockSubmit = false};
})
});
Page_BlockSubmit 是一个 JS 变量,由定义验证器时从后面的代码生成的 js 定义。我还没有深入了解为什么MS需要这个变量,但是场景是:</p>
第一次单击将使 Page_BlockSubmit 变为 false。第二次单击将检查 Page_BlockSubmit 的值并返回 true。
如果您实现了我发布的代码,则每次单击按钮时,该变量都将设置为 false,这将在每次单击时触发提交。
并且,您可以使用 google chrome 来跟踪 Page_BlockSubmit 的值。