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"; 
相关问题