【问题标题】:ASP:DropDownList in ItemTemplate: Why is SelectedValue attribute allowed?ASP:ItemTemplate 中的DropDownList:为什么允许 SelectedValue 属性?
【发布时间】:2009-02-24 04:33:41
【问题描述】:

这段代码

<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


    【解决方案1】:

    在标记中使用 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";
    

    【讨论】:

    • 如果在设计时设置项目而不是执行数据绑定调用来填充,则“标记”代码不起作用
    • 谢谢,我忘记了#号。
    • 谢谢,伊曼。它对我有用 :) 我查看了许多线程,而您的帖子是第一个也是唯一一个准确说明如何使用整数完全在标记中设置 DropDownList 默认 SelectedValue 的帖子。我认为这应该是可能的,但我之前一定是格式有点错误——也许没有引用整数。
    【解决方案2】:

    表示不能通过设计器设置。

    正确的做法是:

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

    【讨论】:

    • 如果不是我的问题的第二部分,那将回答我的问题。显然,在某些情况下,您可以声明式地设置 SelectedValue,如我所示。我试图了解允许和不允许的情况之间的区别。
    • 因为在 gridview 模板中,您实际上还没有使用 bind 方法设置值。绑定实际上发生在运行时。这就像说“在运行时,当我将数据绑定到它时,根据该字段选择一个值”
    猜你喜欢
    • 2023-03-10
    • 1970-01-01
    • 2012-01-27
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    • 2017-02-21
    • 1970-01-01
    • 2013-05-23
    相关资源
    最近更新 更多