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

问题描述 投票:11回答:2

这段代码

<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'属性不能为声明式设置。

但是,这是用于数据绑定GridView的合法且常用的编辑模板。 SelectedValue属性肯定是在此处声明式设置的。

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

问题是:在允许您以声明方式进行设置的情况下与在没有声明的情况下进行设置的情况有什么区别?该错误消息表示永远不允许。

asp.net data-binding drop-down-menu selectedvalue templatefield
2个回答
8
投票

在标记中使用SelectedValue =''语法。(请注意在下面的示例中,单引号和双引号的顺序):

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

或在DataBinding之后的代码后面。(示例):

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

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方法应在运行时应用,因此出现有关无法“以装饰性方式设置”的错误

© www.soinside.com 2019 - 2024. All rights reserved.