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