2012-03-23 2 views
0

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.

Antwort

2

Haben Sie versucht, die ValidatorEnable Funktion zu verwenden?

Es ist eine ASP.Net JavaScript-Funktion, die verwendet werden kann, um clientseitige Validatoren auszuschalten; in Ihrem Beispiel, sollten Sie in der Lage sein, die folgenden in der Client-Seite Javascript zu tun (wo Sie die Eigenschaft enabled eingestellt):

ValidatorEnable(document.getElementById('<%=rfvState.ClientID%>'), false); 

Meine einzige andere Vorschlag ist ein asynchroner Postbacks ausgelöst, wenn das Land geändert wird, und entfernen die Seite des Statusvalidierungsservers.

+0

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. –

+1

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

Verwandte Themen