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


这段代码

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

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


3774
2018-02-24 04:33


起源



答案:


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

正确的方法是:

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


7
2018-02-24 04:39



如果不是我的问题的第二部分,这将回答我的问题。显然,在某些情况下,您可以声明性地设置SelectedValue,如图所示。我试图理解你被允许和不被允许的情况之间的区别。 - recursive
因为在gridview模板中,您还没有使用bind方法实际设置值。绑定实际上是在运行时发生的。这就像是说“在运行时,当我将数据绑定到它时,选择一个基于该字段的值” - Gautam


答案:


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

正确的方法是:

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


7
2018-02-24 04:39



如果不是我的问题的第二部分,这将回答我的问题。显然,在某些情况下,您可以声明性地设置SelectedValue,如图所示。我试图理解你被允许和不被允许的情况之间的区别。 - recursive
因为在gridview模板中,您还没有使用bind方法实际设置值。绑定实际上是在运行时发生的。这就像是说“在运行时,当我将数据绑定到它时,选择一个基于该字段的值” - Gautam


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

7
2018-03-13 07:49



如果在设计时设置项目与执行数据绑定调用以填充,则“标记”代码不起作用 - NotMe
谢谢,我忘记了#符号。 - Ben