2009-07-23 7 views
1

Ich habe einen Repeater, der ein paar Elemente enthält und unter ihnen gibt es eine DropDownList und eine Schaltfläche.Wählen DropDownList Element innerhalb eines Repeater-Steuerelement

Ziel ist es, der ausgewählten Repeaterzeile einen Eintrag aus der DDL zuzuordnen.

ASPX Code:

<asp:Repeater ID="sharedPlansList" runat="server" 
    onitemdatabound="sharedPlansList_ItemDataBound" 
    onitemcommand="sharedPlansList_ItemCommand"> 
    <ItemTemplate> 
     <div> 
      <h1>&middot; <%# Eval("ProductName") %></h1> 
      <div> 
      Associer le domaine : 
      <asp:DropDownList runat="server" ID="domainList" /> 
      <asp:Button ID="associateDomaine" Text="Associer" runat="server" 
       CommandArgument='<%# Container.DataItem %>' /> 
      </div> 
      <div> 
       Domaines : 
       <asp:BulletedList runat="server" ID="sharedPlanDomains" /> 
      </div> 
     </div> 
    </ItemTemplate> 
</asp:Repeater> 

Das Problem:

Wenn ich auf die Schaltfläche klicken ich jedes Mal habe eine ungültige Postback oder Callback-Ausnahme (Ungültige Postback oder Callback-Argument Ereignisvalidierung wird in der Konfiguration aktiviert werden. oder <% @ Page EnableEventValidation = "true"%> auf einer Seite Aus Sicherheitsgründen überprüft diese Funktion, ob Argumente für Postback- oder Callback-Ereignisse vom Serversteuerelement stammen, das sie ursprünglich gerendert hat. Wenn die Daten gültig und erwartet sind, verwenden Sie die ClientScriptManager.RegisterForEventValidation-Methode in um die Postback- oder Callback-Daten für die Validierung zu registrieren.). Aber alles scheint wirklich Standard ohne etwas wirklich Exotisches. Ich füge auch nichts hinzu oder steuere per Javascript.

Ich habe Lösungen gesehen, wo Sie <pages enableEventValidation="false" /> in die web.config setzen konnten, aber ich bin mir nicht sicher, es ist eine gute Lösung, da ich sicherstellen möchte, dass das asp.net integrierte Sicherheitsmodell.

Gibt es einen Workaround?

+0

Funktioniert das CommandArgument/Name tatsächlich? Weil ich etwas ähnliches habe und ich kann es nicht funktionieren lassen! Ignoriert das Befehlsargument vollständig. – Sebastian

Antwort

0

Ich kann nicht sicher sein, ohne Ihren Code etwas zu testen (was ich in dieser Sekunde nicht richtig machen kann), aber können Sie überprüfen, ob das dynamische CommandArgument, das Sie Ihrem Button zuweisen, der Schuldige ist? Wenn Sie es herausnehmen, wird der Fehler immer geworfen?

Wenn das der Fall ist, könnten Sie versuchen, jede Zeile in den OnItemDataBound Handler zu handhaben und

ClientScript.RegisterForEventValidation("associateDomaine", -->CommandArgHere<--); 
+0

Es ist nicht verknüpft, da der Fehler seit dem Hinzufügen von CommandArgument aufgetreten ist: / – Erick

0

Die beste Lösung Dropdownlist mit Ihrer eigenen Dropdownlist zu ersetzen sein wird nennen. Erstellen Sie eine Unterklasse von DropDownList, und verwenden Sie diese Liste auf der ASPX-Seite. Ich denke, der Inhalt Ihrer DropDownList wird auf der Client-Seite geändert (möglicherweise durch Javascript?).