我遇到了同样的问题as described here。
只有问题被标记为已回答时只解释为什么在输入字段上使用RequiredFieldValidator时可能必须单击两次 - 一次因为文本框的模糊(例如)将更正验证然后再次实际发布表格。
我不想两次点击按钮!有没有人知道这个解决方案或解决方法?
答案 0 :(得分:3)
您可以将EnableClientScript=false
添加到验证器。
这会阻止客户端验证,因此您将始终获得回发(尽管可能不完全符合您的要求)。验证仍将在服务器端完成。
确保在if (Page.IsValid) { ... }
中包含按钮单击逻辑,以检查验证器的状态。
答案 1 :(得分:1)
以前没有发布代码的道歉我认为这是RequiredFieldValidator
的标准问题,但后来发现我的特定问题来自CompareValidator
,用于确保输入的密码匹配。< / p>
CompareValidator引起了我所描述的问题,导致我必须点击该字段才能模糊和验证,然后才能点击帖子按钮。
我不确定为什么,但是将{{1>}的显示从动态更改为静态已经解决了问题。
答案 2 :(得分:1)
如果验证器是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有帮助。
答案 3 :(得分:0)
发布代码总是一个好主意,这样我们就可以在测试环境中运行代码并修改它以确保它在发布我们的答案之前有效。
我建议添加
causesValidation="true"
到您的按钮,查看是否有效。
答案 4 :(得分:0)
我有一个更好的主意。
将Text =“”添加到文本框控件。
将InitialValue =“”添加到Validator Control。
它会做什么,当它发布时,它会发现文本框的值仍然是initail值,它将抛出一个错误,表单将不会发布。
试试这个:
<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" />
答案 5 :(得分:0)
以下代码对我来说很好,并有助于摆脱双击。
<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="" />
答案 6 :(得分:0)
$(function() {
$("input.btn").on("click",function(){
if(Page_BlockSubmit == true) {Page_BlockSubmit = false};
})
});
Page_BlockSubmit是一个JS变量,由定义验证器时由代码生成的js定义。我还没有深入了解为什么MS需要这个变量,但场景是:
第一次点击会使Page_BlockSubmit变为false。 第二次单击将检查Page_BlockSubmit的值并返回true。
如果您实现了我发布的代码,每次单击该按钮时,该变量都将设置为false,这将在每次单击时触发提交。
并且,您可以使用Google Chrome跟踪Page_BlockSubmit的值。