Problem z odpowiedzią CAbbott jest to, że błędy walidacji, które występują w grupie „macierzystej” nie będą wyświetlane po wywołaniu zatwierdzania grupę „dziecko”. Najmniejszym problemem z odpowiedzią Olega jest to, że walidacja grupy "dziecko" nie nastąpi, dopóki grupa "nadrzędna" nie będzie gotowa.
Wszystko, co naprawdę musimy zrobić, aby umożliwić walidację po stronie klienta więcej niż jednej grupy w tym samym czasie, to przesłonięcie metody Javascript IsValidationGroupMatch, która określa, czy kontrola ma zostać włączona do bieżącego zestawu, który jest sprawdzany.
Na przykład:
(function replaceValidationGroupMatch() {
// If this is true, IsValidationGroupMatch doesn't exist - oddness is afoot!
if (!IsValidationGroupMatch) throw "WHAT? IsValidationGroupmatch not found!";
// Replace ASP.net's IsValidationGroupMatch method with our own...
IsValidationGroupMatch = function(control, validationGroup) {
if (!validationGroup) return true;
var controlGroup = '';
if (typeof(control.validationGroup) === 'string') controlGroup = control.validationGroup;
// Deal with potential multiple space-delimited groups being validated
var validatingGroups = validationGroup.split(' ');
for (var i = 0; i < validatingGroups.length; i++) {
if (validatingGroups[i] === controlGroup) return true;
}
// Control's group not in any being validated, return false
return false;
};
}());
// You can now validate against multiple groups at once, for example:
// space-delimited list. This would validate against the Decline group:
//
// Page_ClientValidate('Decline');
//
// while this would validate against the Decline, Open and Complete groups:
//
// Page_ClientValidate('Open Decline Complete');
//
// so if you wanted to validate all three upon click of a button, you'd do:
<asp:Button ID="yourButton" runat="server"
OnClick="ButtonSave_Click" CausesValidation="false"
OnClientClick="return Page_ClientValidate('Open Decline Complete');" />
Myślę, że trzeba zmienić OnClientClick do "powrotu validate()" –