Подтвердить что ты не робот

ASP: DropDownList в ItemTemplate: почему атрибут 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" не может быть set декларативно.

Тем не менее, это законный и часто используемый шаблон редактирования для GridViews с привязкой к данным. Атрибут SelectedValue, безусловно, представляется декларативно установленным здесь.

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

Вопрос: в чем разница между случаями, когда вам разрешено объявлять его декларативно, и тем, в которых вы не являетесь? Сообщение об ошибке означает, что он никогда не разрешался.

4b9b3361

Ответ 1

Это означает, что вы не можете установить его через конструктор.

Правильный способ:

<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 предназначен для применения во время выполнения, следовательно, ошибка в том, что он не может установить его "декоративно"

Ответ 2

в разметке используйте 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";