【问题标题】:Custom validator fires but does not prevent postback自定义验证器触发但不阻止回发
【发布时间】:2011-12-31 12:03:55
【问题描述】:

我已经看到了很多关于这个的问题,但我很难过!请帮忙!

我有一个自定义验证器。它正在触发,但并不能阻止回发。请帮助我这样做!我可以看到console.log 在发布之前注册。但是,它无论如何都会发回。如何防止回发?

我尝试添加一个控件来验证,并验证等于 true 的空文本。我还尝试添加 e.preventdefault,但不起作用:(

如何防止回发?

    <script type="text/javascript">
//<![CDATA[
function validateWhyUnlikely(source, args) {
    console.log(1);
    args.isValid = false;
}
//]]>

<asp:TextBox ID="txtWhyUnlikely" runat="server" Rows="4" cols="20"
            CssClass="surveyTextArea" />
<asp:CustomValidator runat="server" ID="cfvWhyUnlikley" ErrorMessage="Please provide a reason since you rated an item as unlikely to provide."
        CssClass="surveyError surveySmallIndent" Display="Dynamic" 
        ClientValidationFunction="validateWhyUnlikely" />
<asp:Button ID="btnSubmit" runat="server" Text="Submit" CssClass="smallSpecial" OnClick="btnSubmit_Click" />


jQuery(document).ready(function () {
    jQuery('#<%= btnSubmit.ClientID %>').click(function (e) {
        if (Page.IsValid == false) {
            console.log(false);
            e.preventDefault();
            return false;
        }
    });
});

【问题讨论】:

    标签: c#-4.0 asp.net-4.0 customvalidator jquery-1.4


    【解决方案1】:

    一切看起来都不错,尽管我不确定您为什么要将Click 功能附加到您的提交按钮。我会删除它并对其进行测试,因为它可能会覆盖默认行为。

    另外我认为您需要将IsValid 属性大写:

    args.IsValid = false;
    

    【讨论】:

    • 谢谢...我希望 JavaScript 已编译!没有错误,没有看到这个大小写错误@Kelsey
    【解决方案2】:

    我也遇到过这个问题,我试图将 custom validator 添加到附加了 selectedIndexChange 事件的 dropdownlist 中。在我为下拉列表提供了不正确的值后,我能够看到我在自定义验证器中提供的错误消息,但在回发发生后立即出现。

    但是,将此属性 CausesValidation="true" 添加到下拉列表控件解决了我的问题。

    将此属性添加到我的下拉列表后,回发未发生在不正确的值上。

    【讨论】:

      【解决方案3】:

      我也遇到过这个问题。

      我所做的是,在按钮调用的 C# 过程中,我在顶部添加了

      if (IsValid == false)
               return;
      

      我无法阻止它执行回发,所以这在我看来是唯一的解决方案。

      【讨论】:

        【解决方案4】:

        发布此内容可能会对遇到同样奇怪行为的人有所帮助。

        最初我遇到了与此帖子标题相同的问题。我在这里检查了所有建议,但我的代码似乎没问题。

        为了解决这个问题,我将原因验证控件 &lt;asp:Button.. 替换为 &lt;button.. 。不知道为什么会这样,但很高兴它现在正在工作。

        【讨论】:

          【解决方案5】:

          你错过了ControlToValidate="txtWhyUnlikely"

          【讨论】:

            【解决方案6】:

            【讨论】:

              【解决方案7】:

              如果它对其他人有所帮助,我有一个验证组,但我忘记将按钮添加到其中。

              确保将按钮、文本框和验证器添加到同一个验证组,以防止回发。

              【讨论】:

              • 2 分钟前解决了我的问题。感谢您提供有用的答案并花时间让我们知道。 +1
              • 正确,关键是您不需要所有这些代码来防止回发。这是控件已经做的事情。只需要指定验证组。
              【解决方案8】:

              我通过创建变量解决了这个问题:

               Boolean fieldIsValid = true;
              

              如果参数不正确,我会在自定义验证表达式中更改值:

              if(args.IsValid == false)
                          {
                              fieldIsValid = false;
                          }
                          else
                          {
                              fieldIsValid = true;
                          }
              

              然后,我也把它放在了提交点击方法中:

              protected void submit_Click(object sender, EventArgs e)
                      {
                          if (fieldIsValid)
                          {
                              //submit my things
                          }
                      }
              

              【讨论】:

                猜你喜欢
                • 2016-08-01
                • 2011-06-25
                • 1970-01-01
                • 1970-01-01
                • 2011-05-17
                • 2016-11-13
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多