Page_ClientValidate проверяет несколько раз.

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

Пожалуйста, помогите. Вот код

function validate() //javascript function
{
    if (typeof(Page_ClientValidate) == 'function') 
    {
        var isPageValid = Page_ClientValidate();
        if(isPageValid)
        {
        }
    }
}

<asp:Button ID="btn1" runat="server" OnClientClick="validate()" Text="button"
                    ValidationGroup="ContactGroup" />

<asp:ValidationSummary ID="ValidationSummary1" runat="server" DisplayMode="List" 
                    ShowMessageBox="true" ShowSummary="false" ValidationGroup="ContactGroup" />

Ответ 1

Проблема в том, что функция Page_ClientValidate принимает входной параметр, если вы не укажете вход, то validationsummary запускается один раз для имени группы.

В вашем случае функция триггеров дважды: один раз для groupname = "ContactGroup" и другой раз для groupname = ""

вы должны изменить

var isPageValid = Page_ClientValidate();

к

var isPageValid = Page_ClientValidate('');

если вы не хотите указывать ValidationGroup, или если вы хотите указать имя группы, вам необходимо вызвать Page_ClientValidate следующим образом:

var isPageValid = Page_ClientValidate('ContactGroup');

Ответ 2

Привет. Прежде всего, вы должны освободить ValidationGroup = "ContactGroup" от кнопки, потому что в этом случае группа проверки вначале вызовет проверку на странице, тогда событие OnClientClick, содержащее функцию проверки, которая вызовет проверку страницы еще раз.

Затем вы должны передать группу проверки "ContactGroup" в функцию Page_ClientValidate(), чтобы он знал, какие элементы управления проверять, потому что просто вызов Page_ClientValidate() будет проверять все элементы управления независимо от их группы проверки (и может отображать сообщение проверки больше чем один раз, в зависимости от того, сколько у вас групп валидации).

Короче сделайте что-то вроде этого:

function validate() //javascript function
{
    if (typeof(Page_ClientValidate) == 'function') 
    {
        var isPageValid = Page_ClientValidate('ContactGroup');
        if(isPageValid)
        {
          //your custom code
        }
    }
}    

<asp:textbox id="txtMyBox" runat="server"/>
<asp:requiredFieldValidator Id="rfv1" runat="server" ControlToValidate="txtMyBox"
ValidationGroup="ContactGroup" ErrorMessage="Bad!"/>

<asp:Button ID="btn1" runat="server" OnClientClick="validate()" Text="button"/>

<asp:ValidationSummary ID="ValidationSummary1" runat="server" DisplayMode="List" 
                    ShowMessageBox="true" ShowSummary="false" ValidationGroup="ContactGroup" />

Ответ 3

просто верните false из функции и измените OnClientClick, как показано ниже:

<asp:Button ID="btn1" runat="server" OnClientClick="return validate();" Text="button" 
                        ValidationGroup="ContactGroup" /> 

        function validate() //javascript function   
        {   
            if (typeof(Page_ClientValidate) == 'function')    
            {   
                var isPageValid = Page_ClientValidate();   
                if(isPageValid)   
                {   
                }   
            }   
        return false;

} 

Ответ 4

Нет необходимости вручную вызывать функцию Page_ClientValidate, если вы не хотите выполнять проверку за пределами попытки обратной передачи.

Установите кнопки CausesValidation на true. Это запустит проверку.

Ответ 5

Вы можете сделать валидацию без показа сообщений, использовать следующий сегмент кода, а затем использовать переменную isPageValid:

 if (Page_ValidationSummaries && Page_ValidationSummaries[0] && Page_ValidationSummaries[0].showmessagebox) {
            var showMessagesOption = Page_ValidationSummaries[0].showmessagebox;
            Page_ValidationSummaries[0].showmessagebox = "False";
            isPageValid = Page_ClientValidate();
            Page_ValidationSummaries[0].showmessagebox = showMessagesOption;
        }

Ответ 6

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

Ответ 7

удалить событие onclientclick кнопки, нет необходимости в этом

Ответ 8

Я знаю, что это старый пост, но вот решение, которое может быть более гибким. Подобно другим предложениям пользователей, это решение принимает группу валидации, которая по умолчанию проверяется элементами управления проверки asp.net. Таким образом вам не нужно будет добавлять OnClientClick="validate()" в элемент управления Button.

//Make sure the Page_ClientValidate function exists
if (typeof (Page_ClientValidate) == "function") {
    //Stash the old implementation in a temp variable
    Page_ClientValidateOld = Page_ClientValidate;

    //Create a new implementation and store it
    //in Page_ClientValidate. Callers will now get
    //this implementation.
    Page_ClientValidate = function (validationGroup) {
        var isValid;

        //Call the old implementation first…
        isValid = Page_ClientValidateOld(validationGroup);

        //and then call our extension
        if (!isValid) {
            // Do something
        }

        return isValid;
    }
}

Если вы хотите больше узнать об этом подходе, я рекомендую вам взглянуть на это сообщение в блоге: http://hyperthink.net/blog/interception-patterns-in-javascript/