Porównaj ceny domen i usług IT, sprzedawców z całego świata

Page_ClientValidate sprawdza wiele razy.


problem u mnie polega na tym, że podsumowanie sprawdzenia (ostrzeżenie) wyświetla się dwukrotnie. Nie mogę zrozumieć powodu.
Proszę pomóż.
Oto kod
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"/>

Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Problem polega na tym, że funkcja Page_ClientValidate przyjmuje parametr wejściowy, jeśli nie określisz parametru wejściowego, podsumowanie walidacji jest wyzwalane raz dla każdej nazwy grupy.
W twoim przypadku funkcja uruchamia się dwukrotnie: raz dla groupname = "ContactGroup" i jeszcze raz dla groupname = ""
musisz się zmienić
var isPageValid = Page_ClientValidate();

do
var isPageValid = Page_ClientValidate('');

jeśli nie chcesz określać ValidationGroup lub jeśli chcesz określić nazwę grupy, musisz wywołać Page_ClientValidate w następujący sposób:
var isPageValid = Page_ClientValidate('ContactGroup');
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Hej. Po pierwsze, musisz stracić ValidationGroup = "ContactGroup" z przycisku, ponieważ posiadanie w nim grupy walidacji najpierw wyzwoli walidację na stronie, a następnie zdarzenie OnClientClick zawierające funkcję walidacji, która uruchomi ponownie walidację strony .
Musisz następnie przekazać grupę "Kontaktgroup" Grupa Page_ClientValidate (), dzięki czemu nie ma potrzeby kontrolowania, ponieważ prosta Call Page_ClientValidate sprawdzi wszystkie elementy sterujące niezależnie od ich grupy weryfikacyjnej (i może wyświetlić komunikat kontrolny więcej niż raz W zależności od liczby grup weryfikacyjnych).
Krótko mówiąc, zrób coś takiego:
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"/>
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

po prostu zwróć false z funkcji i zmień OnClientClick jak poniżej:
<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;}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Nie musisz ręcznie wywoływać funkcji
Page_ClientValidate
, chyba że chcesz przeprowadzić weryfikację poza próbą ogłaszania zwrotnego.
Zainstaluj przyciski

CausesValidation
http://msdn.microsoft.com/en-u ... .aspx
według
true
. Doprowadzi to do weryfikacji.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Możesz przeprowadzić walidację bez wyświetlania komunikatów, użyć następującego segmentu kodu, a następnie użyć zmiennej 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;
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Usuń zdarzenie kliknięcia przycisku, które moim zdaniem wyzwala drugie sprawdzenie.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

usunąć zdarzenie onclientclick przycisku, nie jest to konieczne
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Wiem, że to stary post, ale tutaj jest rozwiązanie, które może być bardziej elastyczne. Podobnie jak inne sugestie użytkowników, to rozwiązanie przyjmuje grupę walidacji, która jest domyślnie przekazywana przez kontrolki walidacji asp.net. W ten sposób nie musisz dodawać
OnClientClick = "validate ()"
do kontrolki 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;
}
}

Jeśli chcesz dowiedzieć się więcej o tym podejściu, polecam zapoznać się z tym wpisem na blogu:

http://hyperthink.net/blog/int ... cript
http://hyperthink.net/blog/int ... ript/
/

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się