Ok iv gefolgt mehr als ein paar der CustomValidators für mehrere ASP CheckBox auf hier und auf ein paar anderen Websites und habe ein bisschen eine harte Zeit damit tatsächlich Validierung, wenn ein Kontrollkästchen aktiviert ist.CustomValidator woes
Während ich eine Vielzahl von Antworten ausprobiert habe, habe ich mich auf eine speziell festgelegt. Ich habe es an den Punkt gebracht, dass es in der Validierungszusammenfassung angezeigt wird, aber wenn die Kontrollkästchen aktiviert sind, werden sie immer noch in der Zusammenfassung angezeigt, dass sie nicht sind. Ich weiß nicht, was ich falsch gemacht habe oder ob ich etwas verpasst habe, aber ich hoffe, dass mir ein extra Augenpaar helfen kann, was ich verpasst habe.
CheckBox ist:
<div class="section">
<span>2</span>Induction Checklist:
</div>
<div class="inner-wrap">
<label>Introduction of relevant staff <asp:CheckBox CssClass="HitCheckbox" ValidationGroup="checkList" runat="server" ID="cbStaffIntro" /></label>
<label>Comments: <asp:TextBox runat="server" ID="txtStaffIntroComment" /></label>
</div> <!-- end inner-wrap -->
<div class="inner-wrap">
<label>Location of all Exits <asp:CheckBox CssClass="HitCheckbox" ValidationGroup="checkList" runat="server" ID="cbExitLocations" /></label>
<label>Comments: <asp:TextBox runat="server" ID="txtExitLocationComment" /></label>
</div> <!-- end inner-wrap -->
<div class="inner-wrap">
<label>Evacuation Assembly Point <asp:CheckBox CssClass="HitCheckbox" ValidationGroup="checkList" runat="server" ID="cbEvacuationPoint" /></label>
<label>Comments: <asp:TextBox runat="server" ID="txtEvacuationPointComment" /></label>
</div> <!-- end inner-wrap -->
<div class="inner-wrap">
<label>Location of Fire Extinguishers <asp:CheckBox CssClass="HitCheckbox" ValidationGroup="checkList" runat="server" ID="cbFireExtLocations" /></label>
<label>Comments: <asp:TextBox runat="server" ID="txtFireExtLocationsComment" /></label>
</div> <!-- end inner-wrap -->
<div class="inner-wrap">
<label>Location of Fire Hoses <asp:CheckBox CssClass="HitCheckbox" ValidationGroup="checkList" runat="server" ID="cbFireHoseLoc" /></label>
<label>Comment: <asp:TextBox runat="server" ID="txtFireHoseLocComment" /></label>
</div> <!-- end inner-wrap -->
<div class="inner-wrap">
<label>Location of First Aid Kits <asp:CheckBox CssClass="HitCheckbox" ValidationGroup="checkList" runat="server" ID="cbFirstAidLoc" /></label>
<label>Comment: <asp:TextBox runat="server" ID="txtFirstAidLocComment" /></label>
</div> <!-- end inner-wrap -->
<div class="inner-wrap">
<label>Location of Male/Female Toilets <asp:CheckBox CssClass="HitCheckbox" ValidationGroup="checkList" runat="server" ID="cbLooLoc" /></label>
<label>Comment: <asp:TextBox runat="server" ID="txtLooLocComment" /></label>
</div> <!-- end inner-wrap -->
<div class="inner-wrap">
<label>Location of Lunch Rooms <asp:CheckBox CssClass="HitCheckbox" ValidationGroup="checkList" runat="server" ID="cbLuncLoc" /></label>
<label>Comment: <asp:TextBox runat="server" ID="txtLunchLocComment" /></label>
</div> <!-- end inner-wrap -->
<div class="inner-wrap">
<label>Explain "No-Smoking" Policy in all Offices and Buildings <asp:CheckBox CssClass="HitCheckbox" ValidationGroup="checkList" runat="server" ID="cbNoSmoke" /></label>
<label>Comment: <asp:TextBox runat="server" ID="txtNoSmokeComment" /></label>
</div> <!-- end inner-wrap -->
<div class="inner-wrap">
<label>Explain and Indicate "No-Go" Zones in Warehouse <asp:CheckBox CssClass="HitCheckbox" ValidationGroup="checkList" runat="server" ID="cbNoGo" /></label>
<label>Comment: <asp:TextBox runat="server" ID="txtNoGoComment" /></label>
</div> <!-- end inner-wrap -->
<div class="inner-wrap">
<label>Other <asp:CheckBox CssClass="HitCheckbox" ValidationGroup="checkList" runat="server" ID="cbOther" /></label>
<label>Comment: <asp:TextBox runat="server" ID="txtOtherComment" /></label>
</div> <!-- end inner-wrap -->
Client-seitige Validierung:
<script>
function CheckBoxRequired_ClientValidate(sender, e)
{
e.IsValid = jQuery(".HitCheckBox input:checkbox").is(':checked');
}
</script>
Server Side Validierung:
public void Required_ServerValidate(object source, ServerValidateEventArgs args)
{
args.IsValid = (cbStaffIntro.Checked);
args.IsValid = (cbExitLocations.Checked);
args.IsValid = (cbEvacuationPoint.Checked);
args.IsValid = (cbFireExtLocations.Checked);
args.IsValid = (cbFireHoseLoc.Checked);
args.IsValid = (cbFirstAidLoc.Checked);
args.IsValid = (cbLooLoc.Checked);
args.IsValid = (cbLuncLoc.Checked);
args.IsValid = (cbNoSmoke.Checked);
args.IsValid = (cbNoGo.Checked);
}
Individuelle Validatoren:
<!-- Checklist Validation Section cbStaffIntro -->
<asp:CustomValidator runat="server" ID="CustomValidatorSi" ValidateEmptyText="true" ValidationGroup="checkList" EnableClientScript="true" Display="None" ErrorMessage="Introduction to relevant Staff Not Completed!" OnServerValidate="Required_ServerValidate" ClientValidationFunction="CheckBoxRequired_ClientValidate" />
<asp:CustomValidator runat="server" ID="CustomValidatorEl" ValidateEmptyText="true" ValidationGroup="checkList" EnableClientScript="true" Display="None" ErrorMessage="Emergancy Exit Locations Not Completed!" OnServerValidate="Required_ServerValidate" ClientValidationFunction="CheckBoxRequired_ClientValidate" />
<asp:CustomValidator runat="server" ID="CustomValidatorEp" ValidateEmptyText="true" ValidationGroup="checkList" EnableClientScript="true" Display="None" ErrorMessage="Evacuation Point Not Covered!" OnServerValidate="Required_ServerValidate" ClientValidationFunction="CheckBoxRequired_ClientValidate" />
<asp:CustomValidator runat="server" ID="CustomValidatorFe" ValidateEmptyText="true" ValidationGroup="checkList" EnableClientScript="true" Display="None" ErrorMessage="Fire Extinguisher Locations Not Covered!" OnServerValidate="Required_ServerValidate" ClientValidationFunction="CheckBoxRequired_ClientValidate" />
<asp:CustomValidator runat="server" ID="CustomValidatorFh" ValidateEmptyText="true" ValidationGroup="checkList" EnableClientScript="true" Display="None" ErrorMessage="Fire Hose Locations Not Covered!" OnServerValidate="Required_ServerValidate" ClientValidationFunction="CheckBoxRequired_ClientValidate" />
<asp:CustomValidator runat="server" ID="CustomValidatorFa" ValidateEmptyText="true" ValidationGroup="checkList" EnableClientScript="true" Display="None" ErrorMessage="First Aid Locations Not Covered!" OnServerValidate="Required_ServerValidate" ClientValidationFunction="CheckBoxRequired_ClientValidate" />
<asp:CustomValidator runat="server" ID="CustomValidatorToilet" ValidateEmptyText="true" ValidationGroup="checkList" EnableClientScript="true" Display="None" ErrorMessage="Toilet Locations Not Covered!" OnServerValidate="Required_ServerValidate" ClientValidationFunction="CheckBoxRequired_ClientValidate" />
<asp:CustomValidator runat="server" ID="CustomValidatorLr" ValidateEmptyText="true" ValidationGroup="checkList" EnableClientScript="true" Display="None" ErrorMessage="Lunchroom Location Not Covered!" OnServerValidate="Required_ServerValidate" ClientValidationFunction="CheckBoxRequired_ClientValidate" />
<asp:CustomValidator runat="server" ID="CustomValidatorNsp" ValidateEmptyText="true" ValidationGroup="checkList" EnableClientScript="true" Display="None" ErrorMessage="No Smoking Policy Not Covered!" OnServerValidate="Required_ServerValidate" ClientValidationFunction="CheckBoxRequired_ClientValidate" />
<asp:CustomValidator runat="server" ID="CustomValidatorNg" ValidateEmptyText="true" ValidationGroup="checkList" EnableClientScript="true" Display="None" ErrorMessage="'No-Go' Zones Not Covered!" OnServerValidate="Required_ServerValidate" ClientValidationFunction="CheckBoxRequired_ClientValidate" />
Die Art und Weise, ich wünsche, dass dies funktioniert, sind alle Kontrollkästchen, mit Ausnahme der mit "Andere" markiert, müssen ausgewählt werden, bevor das Formular validiert wird.
Wie bereits erwähnt, habe ich dies bis zu dem Punkt, dass sie in der Validierungszusammenfassung angezeigt werden, wenn sie nicht überprüft werden. Worüber ich Probleme habe ist, warum sie immer noch als nicht überprüft in der Validierungszusammenfassung angezeigt werden, wenn sie überprüft werden.
Was fehlt hier? oder ist was ich danach nicht möglich bin? Bevor ich vergesse, verwende ich .NET Framework 4 für dieses Projekt.
EDIT: Danke an Scotty für ihre Bemühungen, mir bei diesem Problem zu helfen. Nach dem Anwenden des Fixes musste ich auch die Javascript-Validierung entfernen, um den Code nach Bedarf funktionieren zu lassen.
Warum nicht einfach einen ‚erforderlich‘ -Attribut (außer anderen) auf jedem des Kontrollkästchen enthält? – abramlimpin
@abramlimpin: das klappt leider nicht. –