Jeg jobber med et gammelt prosjekt som er skrevet og deretter patchet av flere personer gjennom årene. Noen steder har de brukt SelectedValue-egenskapen og andre steder har de brukt SelectedItem.Value.
Spørsmål:__ Er SelectedValue
bare en syntaktisk sukkerbit for SelectedItem.Value
eller fungerer SelectedValue
annerledes under panseret? Hvilken fungerer best?
Edit: SelectedItem.Text ble erstattet med SelectedItem.Value
SelectedValue
returnerer samme verdi som SelectedItem.Value
.
SelectedItem.Value
og SelectedItem.Text
kan ha forskjellige verdier, og ytelsen er ikke en faktor her, bare betydningen av disse egenskapene er viktig.
<asp:DropDownList runat="server" ID="ddlUserTypes">
<asp:ListItem Text="Admins" Value="1" Selected="true" />
<asp:ListItem Text="Users" Value="2"/>
</asp:DropDownList>
Her er ddlUserTypes.SelectedItem.Value == ddlUserTypes.SelectedValue
, og begge vil returnere verdien "1".
ddlUserTypes.SelectedItem.Text
ville returnere "Admins", som er forskjellig fra ddlUserTypes.SelectedValue
.
rediger.
under panseret ser SelectedValue ut som følger
public virtual string SelectedValue
{
get
{
int selectedIndex = this.SelectedIndex;
if (selectedIndex >= 0)
{
return this.Items[selectedIndex].Value;
}
return string.Empty;
}
}
og SelectedItem ser slik ut:
public virtual ListItem SelectedItem
{
get
{
int selectedIndex = this.SelectedIndex;
if (selectedIndex >= 0)
{
return this.Items[selectedIndex];
}
return null;
}
}
En stor forskjell mellom disse to egenskapene er at SelectedValue
også har en setter, mens SelectedItem
ikke har det. getter for SelectedValue
er raskere når du skriver kode, og problemet med utførelsesytelse har ingen reell grunn til å bli diskutert. En stor fordel med SelectedValue er også ved bruk av Binding-uttrykk.
edit databindingsscenario (du kan ikke bruke SelectedItem.Value)
<asp:Repeater runat="server">
<ItemTemplate>
<asp:DropDownList ID="ddlCategories" runat="server"
SelectedValue='<%# Eval("CategoryId")%>'>
</asp:DropDownList>
</ItemTemplate>
</asp:Repeater>
De er begge forskjellige. Egenskapen SelectedValue
gir deg den faktiske verdien av elementet i utvalget, mens SelectedItem.Text
gir deg visningsteksten. For eksempel: din rullegardinmeny kan ha en tekst som
<asp:ListItem Text="German" Value="de"></asp:ListItem>
I dette tilfellet vil SelectedValue
være de
og SelectedItem.Text
vil gi 'German'
EDIT:
I så fall er de begge de samme ... Fordi SelectedValue
vil gi deg verdien som er lagret for det valgte elementet i rullegardinmenyen, og SelectedItem.Value
vil være verdien for det valgte elementet.
Så begge vil gi deg det samme resultatet.
I droupDown-listen er det to egenskaper for å legge til elementer.
Hvis du ønsker å hente tekst, bruker du selecteditem.text.
og hvis du vil velge en verdi, bruker du egenskapen selectedvalue.
I ditt tilfelle jeg ting både verdi og tekst eiendom er det samme så uansett om du bruker selectedvalue eller selecteditem.text
Hvis begge er forskjellige, gir de oss forskjellige resultater