2016-03-30 12 views
0

Dieses Problem wird gelöst, siehe meinen Kommentar unter dem BeitragASP.NET DropDownList.SelectedValue geht verloren i nPostBack

Ich habe ein Problem mit meinem Code, den ich puzzeling: Ich habe eine ASP.NET Dropdownlist (einfach, nicht in einer Gridview oder so ...), das statisch an eine Datenbankabfrage gebunden ist. Außerdem füge ich ein Listenelement in der Auszeichnungs:

<asp:DropDownList ID="ddDeviceSelector" runat="server" DataSourceID="CryringDB_InventoryAssets" DataTextField="Identifier" DataValueField="RowID" AutoPostBack="True" OnTextChanged="ddDeviceSelector_IndexChanged" ToolTip="Select a device by name" AppendDataBoundItems="True" Width="300px"> 
    <asp:ListItem>-- Select Device OR Enter Data of New Device --</asp:ListItem> 
</asp:DropDownList> 
<asp:SqlDataSource ID="CryringDB_InventoryAssets" runat="server" connectionString="<%$ ConnectionStrings:CMSValuesExplicitUser %>" SelectCommand="SELECT valueColumn, textColumns FROM myTable"></asp:SqlDataSource> 

ich die Seite mit einer URL-Abfrageparameter aufrufen „? Rid = ...“, wo rid den Wert eines bestimmten Elements in der Liste enthält. Wenn ich versuche, das los zu lösen und das Element in der Liste nach Wert auszuwählen, wird der DropDownList.SelectedValue nicht gesetzt. Code of Page_Load:

protected void Page_Load(object sender, EventArgs e) 
    { 
     // Code to interpret the parameter rid (RowID) in the URL 
     // provides functionality to open formAssetDetails of an individual object. 
     if (!IsPostBack) 
     { 
      ddDeviceSelector.DataBind(); 
      setUiPropertiesByMode(classConstants.displayMode); 

      String rowID = null; 
      rowID = Request.QueryString["rid"]; 

      if (rowID != null) 
      { 
       setUiPropertiesByMode(classConstants.editMode); 
       ddDeviceSelector.Enabled = true; 
       ddDeviceSelector.Enabled = true; 
       ddDeviceSelector.SelectedValue = rowID; 
      } 
     } 

Der Code ausführt, ohne Problem, aber ich sehe eine Fehlermeldung im Debugger (Breakpoint nach Zeile "ddDeviceSelector.SelectedValue = rowID;")

Fehler CS0103: Der Name ‚SelectedValue‘ existiert nicht im aktuellen Kontext

(diese Nachricht aus dem deutschen übersetzt und kann in Englisch sightly unterschiedlich sein)

Jede Hilfe wird geschätzt.

+0

Das Problem ist gelöst: In der URL, die ich verwendet habe, um die Seite/Code oben zu nennen, wurde der Parameter rid als UPPERCASE-String (eine eindeutige Kennung auf Datenbankebene) übertragen. Zur Laufzeit waren die Elemente von DropDown in Kleinbuchstaben, sodass der SelectedValue (Groß- und Kleinschreibung) nicht übereinstimmte. Code geändert in: if (rowID! = Null) { rowID = rowID.ToLower(); ddDeviceSelector.Enabled = true; ddDeviceSelector.SelectedValue = ZeilenID; setAssetValuesByRowID (rowID); } – WolfiG

Antwort

0

Versuchen Sie den ausgewählten Wert im Databound-Ereignis der Dropdownlist-Einstellung, die sicherstellen, dass Ihre Dropdownlist mit Daten voll Databound ist, bevor Sie versuchen, die SelectedValue zu setzen, denken Sie daran, diese Methode zu delegieren auch:

//In your designer file 
ddDeviceSelector.DataBound += new System.EventHandler(ddDeviceSelector_DataBound); 

protected void ddDeviceSelector_DataBound(object sender, EventArgs e) 
{ 
    String rowID = null; 
    rowID = Request.QueryString["rid"]; 

    if (rowID != null) 
    { 
     setUiPropertiesByMode(classConstants.editMode); 
     ddDeviceSelector.Enabled = true; 
     ddDeviceSelector.Enabled = true; 
     ddDeviceSelector.SelectedValue = rowID; 
    } 
} 
+0

Hallo James, danke für die Antwort. Leider hat es nicht funktioniert :( – WolfiG

+0

Ist es der gleiche Fehler? –

+0

Oh - Entschuldigung, ich sehe in diesem Moment, dass der Fehler auf einen Fehler von mir zurückzuführen ist: Ich wählte die falsche Variable zu sehen ... Immer noch der SelectValue Ich habe die Elemente des ddDeviceSelectors überprüft - das Element, das ich auswählen möchte, ist dort, aber wenn ich ein "DataBind()" mache, nachdem ich den ausgewählten Wert gesetzt habe, stürzt das Programm mit "Wert nicht in Liste" ab. – WolfiG