Arg. Projekte zu vererben macht so viel Spaß. Vor allem, wenn sie nicht gut funktionieren, und vor allem, wenn sie UpdatePanels enthalten ...Aktivierung/Deaktivierung des Validators in Steuerelement, das in UpdatePanel eingebettet ist
Ich habe eine Lieferadresse Benutzersteuerung in einem UpdatePanel. Wir müssen in der Lage sein, internationale Adressen zu verarbeiten. Deshalb habe ich das Dropdown-Menü "Status" ein- und ausgeblendet, je nachdem ob das ausgewählte Land USA ist oder nicht. Außerdem habe ich einen RequiredFieldValidator in diesem Dropdown.
Wenn das Benutzersteuerelement auf einer normalen Seite an einer anderen Stelle in der Anwendung verwendet wird, ist alles hervorragend. Im UpdatePanel sieht .NET den RFV jedoch nicht, obwohl JavaScript dies tut.
Address.ascx: (snipped)
<li class="form-list-question question-state">
<span class="form-label">
<asp:Label ID="lblState" runat="server" SkinID="FieldLabel" AssociatedControlID="ddlState" Text="State" /></span>
<asp:DropDownList ID="ddlState" runat="server" SkinID="State" DataSourceID="dsStates" AppendDataBoundItems="true" ViewStateMode="Enabled"
DataTextField="Name" DataValueField="Abbr" CssClass="required">
<asp:ListItem Text="" Value=""></asp:ListItem>
</asp:DropDownList>
<asp:RequiredFieldValidator ID="rfvState" runat="server" EnableClientScript="true" Display="None" ControlToValidate="ddlState"
ErrorMessage="State is required." ValidationGroup="Address" />
</li>
address.js: (snipped)
function SetFormByCountry() {
if (isUsTerritory()) {
$('.question-state').show();
if ($('#rfvState').length > 0) {
$('#rfvState').enabled = true;
}
} else {
$('.question-state').hide();
if ($('#rfvState').length > 0) {
$('#rfvState').enabled = false;
}
}
}
Aktuelles Verhalten: Wenn ein Land außerhalb der USA gewählt wird, die Die Dropdown-Liste "Status" wird nicht mehr angezeigt, aber wenn das Formular gesendet wird, erfolgt die Validierung weiterhin in der nun ausgeblendeten Dropdown-Liste. Es wurden keine JS-Fehler erstellt.
Erwartetes Verhalten: Angesichts des obigen Szenarios sollte der RequiredFieldValidator deaktiviert sein und das Formular sollte posten.
Der Code, den ich oben verwendet habe, ist eine alternative Möglichkeit, die ValidatorEnable-Funktion zu verwenden. Es macht dasselbe, und im Gebrauch bekomme ich das gleiche Ergebnis. –
Ich bin mir ziemlich sicher, ValidatorEnable entfernt auch die Verbindung zwischen dem Client-Steuerelement und dem Validator - es deaktiviert nicht nur den Validator, also sind sie nicht ganz gleich. Nur so ist es mir gelungen, zuverlässig zu machen, wonach Sie suchen. – dash