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

rec*_*ive 11 asp.net data-binding selectedvalue templatefield drop-down-menu

这段代码

<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>
Run Code Online (Sandbox Code Playgroud)

产生此错误:

无法以声明方式设置"SelectedValue"属性.

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

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

问题是:当你被允许以声明方式设置它和不允许你设置它的情况之间有什么区别?错误消息暗示它永远不会被允许.

Gau*_*tam 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>
Run Code Online (Sandbox Code Playgroud)

绑定方法工作的原因是因为在控件绑定到数据源之后,未在设计模式中选择值,而是在运行时选择该值

DropDownList.SelectedValue方法意味着在运行时应用,因此无法将其设置为"装饰性"的错误


Ima*_*idi 7

在标记中使用SelectedValue ='<%#"32"%>语法.(请注意以下示例):

 <asp:DropDownList  ID="ddlField" SelectedValue='<%# "32" %>' 
   runat="server"      DataTextField="Name" DataValueField="ID"  >
  </asp:DropDownList>
Run Code Online (Sandbox Code Playgroud)

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

ddlField.DataSource = Fields.SelectAll();
        ddlField.DataBind();           
        ddlField.SelectedValue = "32";
Run Code Online (Sandbox Code Playgroud)