2013-02-01 5 views
6

Ich habe Probleme mit asp.net Bindung an eine Dropdown-Liste und ich habe keine Ahnung, wie Sie debuggen. Ich habe die anderen Fragen zu diesem Thema auf dem Stapel überprüft, aber nichts hat geholfen. Soweit ich das sehen kann ist der "Name" in der Liste auszuwählen.hat einen SelectedValue, der ungültig ist, weil er in der Liste der Elemente nicht vorhanden ist. Wie debuggen Sie?

<asp:DropDownList ID="dd1" runat="server" DataSourceID="ADataSource" DataTextField="Name" 
                DataValueField="Name" SelectedValue='<%# Bind("Name") %>' Width="255" 
                AppendDataBoundItems="true" TabIndex="3" Font-Size="small" EnableViewState="true" > 
              <asp:ListItem Text="Select" Value="" /> 
              </asp:DropDownList> 

Es folgt der Fehler

System.ArgumentOutOfRangeException durch Benutzercode Nachricht = ‚dd1‘ eine SelectedValue hat nicht behandelte war, die ungültig ist, weil es in der Liste der Elemente ist nicht vorhanden. Parametername: Wert Source = System.Web ParamName = Wert Stacktrace: bei System.Web.UI.WebControls.ListControl.PerformDataBinding (IEnumerable datasource) bei System.Web.UI.WebControls.ListControl.OnDataBinding (EventArgse) bei System.Web.UI.WebControls.ListControl.PerformSelect() bei System.Web.UI.WebControls.BaseDataBoundControl.DataBind() bei System.Web.UI.Control.DataBindChildren() bei System. Web.UI.Control.DataBind (Boolean raiseOnDataBinding) bei System.Web.UI.Control.DataBind() bei System.Web.UI.Control.DataBindChildren() bei System.Web.UI.Control.DataBind (Boolean raiseOnDataBinding) bei System.Web.UI.Control.DataBind() bei System.Web.UI.Control.DataBindChildren() bei System.Web.UI.Control .DataBind (Boolean raiseOnDataBinding) bei System.Web.UI.Control.DataBind() bei System.Web.UI.Control.DataBindChildren() bei System.Web.UI.Control.DataBind (Boolean raiseOnDataBinding) bei System .Web.UI.WebControls.DetailsView.CreateChildControls (IEnumerable datasource, Boolean Datenbindung) bei System.Web.UI.WebControls.CompositeDataBoundControl.PerformDataBinding (IEnumerable data) bei System.Web.UI.WebControls.DetailsView.PerformDataBinding (IEnumerierbar Daten) bei System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback (IEnumerable data) bei System.Web.UI.DataSourceView.Select (Datasourceselectarguments Argumente, Datasourceview Rückruf) bei System.Web.UI.WebControls. DataBoundControl.PerformSelect() bei System.Web.UI.WebControls.BaseDataBoundControl.DataBind() bei System.Web.UI.WebControls.DetailsView.DataBind() bei storeUpdate.GvStoresSelect_SelectedIndexChanged (Object sender, EventArgs e) in Zeile 233 bei System.EventHandler.Invoke (Object sender, EventArgs e) bei System.Web.UI.WebControls.GridView.OnSelectedIndexChanged (EventArgs e) bei System.Web.UI.WebControls.GridView.HandleSelect (Int32 rowIndex) bei System.Web.UI.WebControls.GridView.HandleEvent (EventArgs e, Boolean CausesValidation, Zeichenfolge validationGroup) bei System.Web.UI.WebControls. GridView.OnBubbleEvent (Object Quelle, EventArgse) bei System.Web.UI.Control.RaiseBubbleEvent (Object Quelle, EventArgs args) bei System.Web.UI.WebControls.GridViewRow.OnBubbleEvent (Object Quelle, EventArgse) bei System.Web.UI.Control.RaiseBubbleEvent (Objektquelle, EventArgs-Argumente) bei System.Web.UI.WebControls.LinkButton.OnCommand (CommandEventArgs e) bei System.Web.UI.WebControls.LinkButton.Raisepostbackevent (String eventargument) bei System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent (String eventargument) bei System.Web.UI.Page.RaisePostBackEvent (IPostBackEventHandler Sourcecontrol, String eventargument) bei System.Web.UI.Page.RaisePostBackEvent (Namevaluecollection postdata) bei System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) Innerexception:

Antwort

6

Der Wert von <%# Bind("Name") %> kommen, die wird an das SelectedVal übergeben Diese Eigenschaft stimmt nicht mit einem Objekt in seiner Sammlung überein. Am wahrscheinlichsten Ursachen:

  • Dropdown keine Elemente hat, weil die Auswertung geschieht, bevor die Liste
  • Die Liste gebunden wird gebunden ist, aber fehlt diese besondere Wert
  • Der zurückgegebene Wert null sein könnte
+0

Ist es weg zu sehen, den Wert, den es versucht zu verwenden? – chobo2

+1

Verwenden Sie '<% # Eval (" Name ")%>' außerhalb des Steuerelements und sehen Sie, was es lädt. –

2

Mir ist klar, dass dies ein alter Thread ist, aber Google brachte dies als erste Option für dieses Problem auf - mit einem relativ allgemeinen Suchbegriff.

Wie auch immer, die Probleme, die ich damit hatte und die Art, wie ich es gelöst habe, sind wie folgt. Das Problem wird entweder entstehen, wie Brian Mains aus den folgenden Gründen sagte:

  • Dropdown keine Elemente haben, weil die Auswertung geschieht, bevor die Liste
  • Die Liste gebunden wird gebunden ist, aber fehlt diesen besonderen Wert
  • der zurückgegebene Wert konnte

Das Problem, das ich erleben, obwohl es nicht ganz klar, null sein, wie ich Fehler nicht bekam auf einigen th e andere Dropdowns i wurde mit der gleichen Methode war, dass auf Last der Seite i diesen Code-behind zu verwenden versuchte, ein Element in die Dropdownlist hinzuzufügen:

drpNationality.Text = GlobalScript.CountDatabaseRecords("SELECT [nationality_desc] FROM [tbl_people] INNER JOIN [tbl_lkup_nationality] AS nationality ON [nationality] = [nationality_id] WHERE [person_id] ='" + Session["ID"] + "'"); 

Und ist HTML die DropDown hier (die durch eine Datasource bevölkerten Artikel hatte):

<label>Nationality:</label> 
<asp:DropDownList ID="drpNationality" runat="server" DataSourceID="Nationality_Datasource" DataTextField="nationality_desc" DataValueField="nationality_id"> 
</asp:DropDownList> 

nun das Problem, das ich war, war immer, dass die Daten an die Steuerung zum Zeitpunkt der Last gebunden worden waren, als ich versuchte, Gegenstände in der hinzufügen Code-Behing. Weil ich versuchte, einen Wert aus der Datenbank beim Start für den Benutzer vorzuwählen (der in der Liste existierte), war ich nicht zu gestört, wenn der Gegenstand im Wesentlichen zweimal darin erschien.

So war mein Workaround das folgende.

änderte ich den Code hinter dem folgenden, so dass der Punkt auf die Dropdownlist auf der Ausführung des Load-Ereigniscode und dann ausgewählt wurde hinzugefügt:

für das Element
var = GlobalScript.CountDatabaseRecords("SELECT [nationality] FROM [tbl_people] INNER JOIN [tbl_lkup_nationality] AS nationality ON [nationality] = [nationality_id] WHERE [person_id] ='" + Session["ID"] + "'"); 
drpNationality.Items.Add(var); 
drpNationality.Text = var; 

Aber um die gewählt wurde, im Code-behind zu bleiben, wenn die Seite vollständig geladen ist und nicht von der Datasource überschrieben werden, müssen Sie den HTML-Code wie folgt ändern:

<label>Nationality:</label> 
<asp:DropDownList ID="drpNationality" runat="server" DataSourceID="Nationality_Datasource" DataTextField="nationality_desc" DataValueField="nationality_id" AppendDataBoundItems="True"> 
</asp:DropDownList> 

Nun, wenn die Seite geladen wird, wird der Wert aus der Datenbank sollte in der Dropdown-Liste vorausgewählt werden, und alle DataSource-Elemente sollten ebenfalls hinzugefügt werden.

Hoffe, das hilft.

1

Ich hatte das gleiche Problem. Hier ist was los war. Ich hatte ursprünglich den Wert auf etwas eingestellt, das nicht in meiner Auswahlliste war. Wenn das, was Sie ursprünglich hatten, nicht zu den Werten gehört, die Sie in der Dropdown-Liste anzeigen möchten, funktioniert es nicht. Zum Beispiel, wenn Sie ursprünglich Fred in den Daten hatten, müssen Sie Fred in dieser Dropdown-Liste haben.

1

DataBind stinkt. Ich habe alle erwähnten Vorschläge ausprobiert und keiner von ihnen hat funktioniert. Endete Einstellung SelectedValue auf null, Clearing alle Elemente (myDDL.Items.Clear()) und dann durch meine Liste iterieren und manuell das Hinzufügen neuer Listitems - myDDL.Items.Add(new ListItem(myListEntry.Text,myListEntry.Value))

0

In meinem Fall das Verfahren zum Löschen der Dropdown-Liste wurde anfänglich als ddlname.text = string.empty.

Ich setzte es auf ddlname.items.clear() zurück und dies löste den Fehler.

0

Wenn die Dropdown-Steuerelemente Text Eigenschaft mit einem beliebigen Wert vor dem Zuweisen der Datenquelle zugewiesen wird, wird dieser Fehler auftreten.

Beispiel:

StatusDropDown.Text = "some value"; 
StatusDropDown.DataSource = statusDatatable; 

Während die 2. Zeile ausgeführt wird, werden Sie diesen Fehler erhalten.

0

Ich stieß auf ein ähnliches Problem - das grundlegende Problem war das Format der zugrunde liegenden SQL-Datenbank-Feld von meiner RadioButtonList referenziert. Ich habe das DB-Feld von NCHAR in VARCHAR umgewandelt ... Ich denke, NCHAR fügt dem Feld zusätzlichen Inhalt hinzu, was zu einem Fehler bei der Auswertung durch den RadiolButton führte. Sie müssen möglicherweise Daten löschen und laden, die als NCHAR in VARCHAR eingefügt wurden. Das hat für mich funktioniert ... hoffe es funktioniert für dich.

Verwandte Themen