11

Questo pezzo di codiceASP: DropDownList in ItemTemplate: Perché l'attributo SelectedValue è consentito?

<asp:DropDownList runat="server" ID="testdropdown" SelectedValue="2"> 
    <asp:ListItem Text="1" Value="1"></asp:ListItem> 
    <asp:ListItem Text="2" Value="2"></asp:ListItem> 
    <asp:ListItem Text="3" Value="3"></asp:ListItem> 
</asp:DropDownList> 

cede questo errore:

The 'SelectedValue' property cannot be set declaratively.

Eppure, questo è un modello di modifica legale e comunemente usato per GridView databound. L'attributo SelectedValue sembra essere impostato in modo dichiarativo qui.

<EditItemTemplate> 
    <asp:DropDownList runat="server" 
     ID="GenreDropDownList" 
     DataSourceID="GenreDataSource" 
     DataValueField="GenreId" 
     DataTextField="Name" 
     SelectedValue='<%# Bind("Genre.GenreId") %>'> 
    </asp:DropDownList> 
</EditItemTemplate> 

La domanda è: qual è la differenza tra i casi in cui si è permesso di impostare in modo dichiarativo e quelli in cui non si è? Il messaggio di errore implica che non è mai consentito.

risposta

6

Significa che non è possibile impostarlo tramite il designer.

Il modo corretto è:

<asp:DropDownList runat="server" ID="testdropdown"> 
    <asp:ListItem Text="1" Value="1"></asp:ListItem> 
    <asp:ListItem Text="2" Value="2" Selected></asp:ListItem> 
    <asp:ListItem Text="3" Value="3"></asp:ListItem> 
</asp:DropDownList> 

Il motivo il metodo associato funziona è perché il valore non è selezionata nella modalità di progettazione, ma in fase di esecuzione dopo il controllo si associa a un'origine dati

DropDownList Il metodo .SelectedValue è pensato per essere applicato in fase di esecuzione quindi l'errore relativo alla mancata impostazione 'decoratively'

+0

Che avrebbe risposto alla mia domanda, se non fosse stato per la seconda parte della mia domanda. Chiaramente, in alcuni casi, è consentito impostare in modo selettivo SelectedValue, come illustrato. Sto cercando di capire la differenza tra i casi in cui sei autorizzato e non. – recursive

+1

Perché nel modello gridview non si è ancora impostato un valore utilizzando il metodo bind. Il binding avviene in realtà a runtime. È come dire "In fase di runtime, quando collego i dati ad esso, selezionare un valore basato su questo campo" – Gautam

7

in uso markup SelectedValue = '<% # "32"%> sintassi. (Notare il seguente esempio):

<asp:DropDownList ID="ddlField" SelectedValue='<%# "32" %>' 
    runat="server"  DataTextField="Name" DataValueField="ID" > 
    </asp:DropDownList> 

o in code-behind appena dopo DataBinding (esempio):.

ddlField.DataSource = Fields.SelectAll(); 
     ddlField.DataBind();   
     ddlField.SelectedValue = "32"; 
+0

Il codice "markup" non funziona se gli elementi sono impostati in fase di progettazione rispetto a una chiamata di database per popolare – NotMe

+0

Grazie, avevo dimenticato il simbolo #. – Ben