7

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

我有一个自定义验证器。它正在触发,但并不能阻止回发。请帮助我这样做!我可以看到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;
        }
    });
});
4

8 回答 8

7

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

另外我认为你需要大写IsValid财产:

args.IsValid = false;
于 2011-11-17T16:24:49.177 回答
3

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

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

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

于 2012-06-07T07:54:46.140 回答
3

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

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

于 2016-05-19T07:33:58.503 回答
1

我也遇到过这个问题。

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

if (IsValid == false)
         return;

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

于 2013-05-24T11:19:22.760 回答
1

你不见了ControlToValidate="txtWhyUnlikely"

于 2014-01-28T18:13:14.173 回答
0

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

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

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

hth

于 2013-05-29T08:40:00.693 回答
0

<button 标记缺少要验证的正确 JavaScript 代码。<asp:Button 确实呈现了正确的 javascript。

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

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

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

于 2014-10-26T03:00:07.987 回答
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
            }
        }
于 2017-06-27T16:22:50.070 回答