ASP:DropDownList in ItemTemplate: Why is SelectedValue attribute allowed?

核能气质少年 提交于 2019-11-28 07:13:04

问题


This piece of code

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

yields this error:

The 'SelectedValue' property cannot be set declaratively.

Yet, this is a legal and commonly used edit template for databound GridViews. The SelectedValue attribute certainly appears to be declaratively set here.

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

The question is: what is the difference between the cases when you are allowed to set it declaratively and those in which you are not? The error message implies that it's never allowed.


回答1:


It means you cannot set it through the designer.

The correct way is:

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

The reason the bound method works is because the value isn't selected in design mode but at runtime after the control is bound to a datasource

The DropDownList.SelectedValue method is meant to be applied at runtime hence the error about not being able to set it 'decoratively'




回答2:


in markup use SelectedValue='<%# "32" %> syntax .(note the following example ):

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

or in code-behind just after DataBinding .(example):

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


来源:https://stackoverflow.com/questions/580487/aspdropdownlist-in-itemtemplate-why-is-selectedvalue-attribute-allowed

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!