ASP:ItemTemplate中的DropDownList:为什么允许SelectedValue属性?

时间:2009-02-24 04:33:42

标签: asp.net data-binding drop-down-menu selectedvalue templatefield

这段代码

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

产生此错误:

  

'SelectedValue'属性不可以   以声明方式设置。

然而,这是数据绑定GridViews的合法且常用的编辑模板。 SelectedValue属性肯定在这里以声明方式设置。

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

问题是:当你被允许以声明方式设置它而你不允许设置它时,有什么区别?错误消息暗示它永远不会被允许。

2 个答案:

答案 0 :(得分:7)

这意味着您无法通过设计师进行设置。

正确的方法是:

<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方法意味着在运行时应用,因此无法将其设置为“装饰性”的错误

答案 1 :(得分:7)

标记中的

使用SelectedValue ='&lt;%#“32”%&gt;语法。(请注意以下示例):

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

或在DataBinding之后的代码隐藏中。(示例):

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