Пользовательский валидатор срабатывает, но не предотвращает обратную передачу

Я уже видел много вопросов по этому поводу, но я в тупике! Пожалуйста помоги!

У меня есть кастом-валидатор. Он срабатывает, но не мешает обратной передаче. Пожалуйста, помогите мне в этом! Я вижу, что 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;
        }
    });
});

person Hoppe    schedule 17.11.2011    source источник


Ответы (8)


Все выглядит нормально, хотя я не уверен, почему вы добавляете функцию Click к своей кнопке отправки. Я бы удалил это и протестировал, так как он, возможно, переопределяет поведение по умолчанию.

Также я думаю, вам нужно использовать свойство IsValid с заглавной буквы:

args.IsValid = false;
person Kelsey    schedule 17.11.2011
comment
Спасибо ... Желаю, чтобы был скомпилирован JavaScript! Нет ошибок, не видел эту ошибку корпуса @Kelsey - person Hoppe; 17.11.2011

Я тоже столкнулся с этой проблемой, я пытался добавить настраиваемый валидатор в раскрывающийся список, к которому было прикреплено событие selectedIndexChange. После того, как я указал неверное значение для раскрывающегося списка, я смог увидеть сообщение об ошибке, которое я дал в пользовательском валидаторе, но сразу после этого произошла обратная передача.

Однако при добавлении этого свойства CausesValidation="true" в элемент управления раскрывающимся списком моя проблема была решена.

После добавления этого свойства в раскрывающийся список не выполнялась обратная передача при неправильном значении.

person Shalini    schedule 07.06.2012

Если это помогает другим людям, у меня была группа проверки, в которую я забыл добавить кнопку.

Обязательно добавьте кнопку, текстовое поле и валидатор в одну группу проверки, чтобы предотвратить обратную передачу.

person James Love    schedule 19.05.2016
comment
Решил свою проблему 2 минуты назад. Спасибо за полезный ответ и за то, что нашли время сообщить нам об этом. +1 - person Nikos; 29.11.2018
comment
Верно, дело в том, что вам не нужен весь этот код для предотвращения обратной передачи. Это то, что уже делает контроль. Просто нужно указать группу валидации. - person derloopkat; 18.09.2019

Я тоже столкнулся с этой проблемой.

Что я сделал, так это в процедуре C #, которая вызывалась кнопкой, вверху я добавил

if (IsValid == false)
         return;

Я не мог остановить его выполнение обратной передачи, поэтому это казалось мне единственным решением.

person Richard    schedule 24.05.2013

Вы скучаете по ControlToValidate="txtWhyUnlikely"

person andy_b    schedule 28.01.2014

Публикация этого сообщения может помочь кому-то, у кого такое же странное поведение.

Изначально у меня была та же проблема, что и у этого заголовка. Я проверил все предложения здесь, но мой код, похоже, в порядке.

Чтобы исправить это, я заменил элемент управления проверкой причины <asp:Button.. на <button... Не знаю, почему это происходит, но рад, что сейчас это работает.

hth

person Spaceghost    schedule 29.05.2013

В тегах кнопок ‹отсутствует правильный код JavaScript для проверки. ‹Asp: у кнопки действительно отображается правильный javascript.

Я добавил это к любым тегам кнопок:

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

и это решило проблему с обратной связью. Обратная передача не происходит, если клиентская сторона обнаруживает проблему.

person davidWazy    schedule 26.10.2014

Я решил эту проблему, создав переменную:

 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
            }
        }
person lumayara    schedule 27.06.2017