【问题标题】:RequiredFieldValidator have to click twiceRequiredFieldValidator 必须点击两次
【发布时间】:2017-01-04 19:20:51
【问题描述】:

我遇到了同样的问题as described here

只有问题被标记为已回答,仅解释为什么在输入字段上使用 RequiredFieldValidator 时可能必须单击两次 - 一次是因为文本框的模糊(例如)将更正验证,然后再次实际发布表单。

我不想点击按钮两次!有谁知道解决方案或解决方法?

【问题讨论】:

  • 只是一个快速的,但您是否尝试在按钮单击后面的代码中使用 Page.Validate("validationGroup"),是否仍然出现相同的问题?
  • 会试试看会发生什么,谢谢
  • 这只是在黑暗中的粗略刺伤。如果您想避免使用魔术字符串,您可以使用 myControl.ValidationGroup。那就是如果它有效的话。
  • 唯一的问题是它此时已经发回了,我想使用 RequiredFieldValidator 来防止这种情况发生,除非这些字段是有效的

标签: asp.net requiredfieldvalidator


【解决方案1】:

您可以将EnableClientScript=false 添加到验证器。

这会阻止客户端验证,因此您将始终收到回发(尽管这可能不是您想要的)。验证仍将完成,只是在服务器端。

确保将按钮单击逻辑封装在 if (Page.IsValid) { ... } 中,以检查验证器的状态。

【讨论】:

    【解决方案2】:

    抱歉之前没有发布代码我认为这是RequiredFieldValidator 的标准问题,但后来意识到我的特殊问题来自CompareValidator,用于确保输入的密码匹配。

    CompareValidator 导致了我所描述的问题,导致我必须点击离开字段以进行模糊和验证,然后才能点击发布按钮。

    我不知道为什么,但是将 CompareValidator 的显示从 Dynamic 更改为 Static 已经解决了问题。

    【讨论】:

    • 我在 2014 年遇到了这个线程,并尝试将我所有验证器上的 Display 设置为静态 - 奇怪的是,在我所有具有 @ 的“取消”按钮上仍然具有相同的行为987654325@ 设置为 False。在我的情况下,它似乎链接到我附加到调用Page_ClientValidate() 然后检查Page_IsValid 的配套“保存”按钮上的一些附加JavaScript。我将不得不在以后更深入地研究它......
    • 尝试添加 Page_BlockSubmit = false;到取消按钮。 Page_ClientValidate() 将其设置为 true,因此您的第一次单击将其设置为 false,然后第二次提交。如果您将其设置为 false,它将在第一次点击时回发。
    • 给未来的 Web Searcher 的消息:还要检查您的 ErrorMessage 属性是否为空白或缺失。我想要内联消息,所以我把它放在标签之间。将它放在属性中和标签之间为我解决了这个问题。我将 Display 设置为 Dynamic 并将 EnableClientScript 设置为 True。按照这里的建议更改这些并不能解决问题。确实添加了错误消息。
    【解决方案3】:

    如果验证器是 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 确实有帮助。

    【讨论】:

      【解决方案4】:

      发布您的代码总是一个好主意,这样我们就可以在测试环境中运行您的代码并对其进行修改以确保它在发布我们的答案之前工作。

      我建议添加

      causesValidation="true" 
      

      到您的按钮,看看是否有效。

      【讨论】:

      • 这不是默认值吗?
      • 我不确定它是否是默认值。在 MSDN 上的控件没有提到这一点。 msdn.microsoft.com/en-us/library/…
      • 当你点击属性时,你会得到here,它确实表明true是默认值。
      【解决方案5】:

      我有个更好的主意。

      将 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" />
      

      【讨论】:

        【解决方案6】:

        这里的代码对我来说运行良好,有助于摆脱双击。

          <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="" />
        

        【讨论】:

          【解决方案7】:
          $(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,这将在每次单击时触发提交。

          而且,您可以使用谷歌浏览器来跟踪 Page_BlockSubmit 的值。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-12-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-09-12
            • 2012-10-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多