自定义验证器触发但不会阻止回发

时间:2011-11-17 16:04:03

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

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

我有一个customvalidator。它正在开火,但它并没有阻止回发。请帮我这样做!我可以看到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;
        }
    });
});

8 个答案:

答案 0 :(得分:5)

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

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

args.IsValid = false;

答案 1 :(得分:3)

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

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

将此属性添加到我的下拉列表后,回复未在错误的值上发生。

答案 2 :(得分:2)

如果它有助于其他人,我有一个验证组,我忘了添加按钮。

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

答案 3 :(得分:1)

我也遇到过这个问题。

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

if (IsValid == false)
         return;

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

答案 4 :(得分:1)

您缺少ControlToValidate="txtWhyUnlikely"

答案 5 :(得分:0)

发布此信息可能有助于某些人获得相同的奇怪行为。

最初我和这个帖子标题有同样的问题。我检查了所有的建议,但我的代码似乎没问题。

要解决此问题,我将原因验证控件<asp:Button..替换为<button..。不知道为什么会这样,但很高兴它现在正在运作。

HTH

答案 6 :(得分:0)

&lt;按钮标记缺少要验证的正确javascript代码。 &lt; asp:Button确实有正确的javascript渲染。

我已将此添加到任何按钮标记中:

btn.Attributes("onclick") = StringFmt("if(!Page_ClientValidate(''))return false;")

这解决了回发后的问题。如果客户端检测到问题,则不会发生回发。

答案 7 :(得分:0)

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

 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
            }
        }