11

這段代碼ASP:ItemTemplate中的DropDownList:爲什麼允許SelectedValue屬性?

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

產生這樣的錯誤:

The 'SelectedValue' property cannot be set declaratively.

然而,這是一個數據綁定GridView的法律和常用的編輯模板。 SelectedValue屬性在這裏顯然是聲明式設置的。

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

的問題是:是什麼情況之間的差異,當你被允許以聲明方式設置它和那些在你是不是?錯誤消息意味着它從來不被允許。

回答

6

這意味着你不能通過設計器來設置它。

正確的方法是:

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

原因綁定的方法的工作原理是,因爲該值不在設計模式,但在運行時選擇的控件綁定到數據源後

DropDownList控件.SelectedValue方法意味着在運行時應用,因此,無法將其設置爲'裝飾性'的錯誤

+0

那會回答我的問題,如果不是我的問題的第二部分。顯然,在某些情況下,您可以聲明式設置SelectedValue,如我所示。我試圖理解當你被允許與不允許的情況下的區別。 – recursive 2009-02-24 04:42:43

+1

因爲在gridview模板中你還沒有使用bind方法實際設置一個值。綁定實際上是在運行時發生的。 這就像是說:「在運行時,當我將數據綁定到它時,根據此字段選擇一個值」 – Gautam 2009-02-24 12:32:28

7

in markup use SelectedValue ='<%#「32」%> syntax(注意以下示例):

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

或代碼隱藏剛過數據綁定(例如):

ddlField.DataSource = Fields.SelectAll(); 
     ddlField.DataBind();   
     ddlField.SelectedValue = "32"; 
相關問題