11

Этот фрагмент кода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> 

дает эту ошибку:

The 'SelectedValue' property cannot be set declaratively.

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

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

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

ответ

6

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

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

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

+0

Что бы ответить на мой вопрос, если бы это было не для второй части моего вопроса. Очевидно, что в некоторых случаях вам разрешено декларативно устанавливать SelectedValue, как я иллюстрировал. Я пытаюсь понять разницу между случаями, когда вам разрешено, а не. – recursive

+1

Поскольку в шаблоне gridview вы фактически не установили значение, используя метод bind. Связывание фактически происходит во время выполнения. Это как сказать: «Во время выполнения, когда я привязываю данные к нему, выберите значение на основе этого поля» – Gautam

7

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

Код «разметки» не работает, если элементы установлены во время разработки, а не выполняют вызов привязки данных для заполнения – NotMe

+0

. Спасибо, я забыл знак #. – Ben