ASP: DropDownList в ItemTemplate: почему разрешен атрибут SelectedValue? - PullRequest
11 голосов
/ 24 февраля 2009

Этот кусок кода

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

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

Ответы [ 2 ]

7 голосов
/ 13 марта 2010

в разметке используйте синтаксис 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 голосов
/ 24 февраля 2009

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

Правильный путь:

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

...