Binden einer DropDownList in ListView InsertItemTemplate-auslösen eines Fehlers
Ich habe eine ListView, die bindet an eine LinqDataSource-Steuerelement und zeigt die ausgewählten Standorte. Die insert-Element Enthält eine dropdownlist, zieht von einem anderen LinqDataSource-Steuerelement, um alle nicht ausgewählten Standorten.
Das problem ist, ich bekomme folgende Fehlermeldung beim laden der Seite:
Databinding-Methoden wie Eval(), XPath () und Bind() können nur im Kontext eines datengebundenen Steuerelements.
Mache ich eine sehr ähnliche Einrichtung in einer anderen Seite der website, und es ist nicht, dass er uns diesen Fehler, damit bin ich ziemlich verwirrt. Ich weiß, ich kann dies umgehen, indem nicht die Bindung, manuell suchen der Kontrolle und immer den Wert, aber dies sollte funktionieren und ich verstehe nicht, warum es nicht.
Irgendwelche Gedanken?
Den besseren Teil des Quellcodes ist unten.
<asp:LinqDataSource ID="ldsLocations" runat="server"
ContextTypeName="ClearviewInterface.ESLinqDataContext" EnableDelete="true" EnableInsert="true"
OnInserting="ldsLocations_Inserting" OnDeleting="ldsLocations_Deleting"
TableName="crmLocations" OrderBy="addr1" OnSelecting="ldsLocations_Selecting" />
<asp:LinqDataSource ID="ldsFreeLocations" runat="server"
ContextTypeName="ClearviewInterface.ESLinqDataContext" OrderBy="addr1"
TableName="v_CVLocations" OnSelecting="ldsFreeLocations_Selecting" />
<asp:ListView ID="lvLocations" DataSourceID="ldsLocations" DataKeyNames="ID" InsertItemPosition="LastItem" runat="server" >
<InsertItemTemplate>
<tr>
<td colspan="6"><hr /></td>
</tr>
<tr>
<td colspan="2">
<asp:DropDownList ID="ddlFreeLocations" DataSourceID="ldsFreeLocations" DataTextField="addr1"
DataValueField="record" MarkFirstMatch="true" SelectedValue='<%# Bind("record") %>'
runat="server" />
</td>
<td><asp:ImageButton ID="btnAdd" CommandName="Insert" SkinID="Insert" runat="server" /></td>
</tr>
</InsertItemTemplate>
wenn Sie alle finden wird. zu tun, verbindlich in der dropdown-innen listview... bitte geben Sie mir zu...
InformationsquelleAutor CodeRedick | 2009-01-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als erklärt auf Joteke s Blog hier ist eine zitierte Lösung.
JA! Das war mein problem, wo ich 'eval(666)' zu konstruieren, die eine sub-Steuerung und ein null-Wert löst eine wobbley. Ich benutzte die
<%#DataBinder.Eval(Container.DataItem,"field")%>,
und es löste das problem, weil dann mein sub control behandelt, die null und nicht Umfallen wie ein betrunkener moneky. PS ich aktualisiert Ihre Antwort, weil link nur Antworten schlecht sind... die Sachen hinter dem link, vielleicht verschwinden Sie eines Tages.InformationsquelleAutor ruffone
Werfen Sie einen Blick auf diesen thread http://forums.asp.net/t/1187425.aspx
Im Grunde, können Sie nicht verwenden Sie Bind-syntax, da die Bedienelemente im InsertItemTemplate sind "one-way" nur. Verwenden Sie code, um die Werte.
InformationsquelleAutor stefann
Für solchen Szenario, können wir betrachten die folgenden Auflösungen:
Für die inneren geschachtelten Steuerelementen, anstatt databinding verwenden wir andere Methoden zum Auffüllen seiner Elemente. Zum Beispiel können wir eine for-Schleife verwenden, um Elemente hinzuzufügen, in der dropdownlist statt databinding. So, die <%# ...%> Ausdruck wird nicht ausgewertet.
Wir können auch eine änderung auf dem DetailsView-Steuerelement-container. Anstelle von <%# %> Ausdruck, können wir es manuell verwenden Sie einen event wie "RowDataBound" zum Auffüllen von Daten-posten der bestimmten inneren Kontrolle. Und wenn Sie ausführen, aktualisieren/einfügen, manuell extrahieren Sie die Werte von Steuerelementen in die richtige Veranstaltung(z.B. ItemUpdating oder ItemInserting...).
Quelle:
http://blogs.msdn.com/b/stcheng/archive/2009/01/15/aspnet-system-invalidoperationexception-databinding-methods-such-as-eval-xpath-and-bind-can-only-be-used-in-the-context-of-a-databound-control-error-in-nested-databinding-scenario.aspx
InformationsquelleAutor Amin
diese arbeiten
InformationsquelleAutor kumari khushboo
Ich habe ein ähnliches Problem. Versuchen Sie, verwenden Sie #Eval statt, wenn Sie nicht aktualisieren Sie den Wert des Feldes.
InformationsquelleAutor Gthompson83
Habe ich es geschafft. Ich habe eine Formview mit einer SqlDataSource und auf der Formular-Ansicht gibt es eine dropdownlist mit einer SQLdataSource.
Wenn ein neuer Datensatz angefordert wird, ich re-issue der select-Befehle für beide Datenquellen - das dropdownlist-Quelle enthält eine Liste der Optionen während der formview-datasource gibt nichts zurück.
Dann benutze ich DataBind() für beide den formview und das dropdownlist-und alles ist gut.
Ich bin neu ASP.Net aber das ist für mich zu arbeiten und mir erlaubt zu tun, was ich will - Bind verwenden, die auf die dropdownlist und die Textfelder in der Formularansicht
Ich hoffe das hilft
Nathan
InformationsquelleAutor nathj07
Mit #Eval kann es sich lohnen, mit DataBinder.Eval (), um sicherzustellen, die Bindung zur rechten Zeit geschieht.
InformationsquelleAutor nathj07