11

这段代码

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

问题是:允许以声明方式设置它的情况与不允许设置的情况有什么区别?错误消息暗示它永远不允许。

4

2 回答 2

9

在标记中使用 SelectedValue='<%# "32" %>' 语法。(注意以下示例中单引号和双引号的顺序):

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

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

  ddlField.DataSource = Fields.SelectAll();
  ddlField.DataBind();           
  ddlField.SelectedValue = "32";
于 2010-03-13T07:49:09.310 回答
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 方法旨在在运行时应用,因此无法将其设置为“装饰性”的错误

于 2009-02-24T04:39:44.967 回答