Formview Dropdown 2 зависит от Dropdown 1

У меня есть вид формы, в шаблоне редактирования у меня есть два раскрывающихся списка. Выпадающий 1 явно задается списком допустимых значений. Он также настроен на автоматическую отправку сообщений. Выпадающий список 2 привязан к источнику данных объекта, этот источник данных объекта использует первое раскрывающееся меню в качестве одного из своих параметров. (Идея состоит в том, что раскрывающийся список 1 ограничивает то, что показано в раскрывающемся списке 2)

При первом просмотре шаблона редактирования для элемента все работает нормально. Но если в раскрывающемся списке 1 выбран другой элемент, он отправляет обратно и генерирует ошибку

Databinding methods such as Eval(), XPath(), and Bind() can only be used in the context of a databound control.

Вот выпадающий список №2:

<asp:DropDownList ID = "ProjectList" runat = "server" SelectedValue='<%# Bind("ConnectToProject_ID","{0:D}") %>' DataSourceID = "MasterProjectsDataSource2" DataTextField = "Name" DataValueField = "ID" AppendDataBoundItems = "true">
      <asp:ListItem Value = "0" Text = "{No Master Project}" Selected = "True" />
</asp:DropDownList>

А вот и MasterProjectDataSource2:

<asp:ObjectDataSource ID = "MasterProjectsDataSource2" runat = "server" 
            SelectMethod = "GetMasterProjectList" TypeName = "WebWorxData.Project" >
            <SelectParameters>
                <asp:ControlParameter ControlID = "RPMTypeList" Name = "RPMType_ID" 
                    PropertyName = "SelectedValue" Type = "Int32" />
            </SelectParameters>
        </asp:ObjectDataSource>

Любая помощь о том, как заставить это работать, будет очень приветствоваться.

Вы решили проблему, иначе я предложу вам другое элегантное решение?

Muhammad Akhtar 14.12.2009 17:00
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
1
2 208
3

Ответы 3

Похоже, что элементы управления не привязаны к данным должным образом после обратной передачи.

Вы привязываете данные к первому раскрывающемуся списку на странице или в коде? Если codebehind, вы делаете это каждый раз в on_init или on_load?

Возможно, проблема в том, что для SelectedValue второго раскрывающегося списка установлен несуществующий элемент после обратной передачи.

Если ваш второй раскрывающийся список не находится в элементе управления привязкой данных (скажем, Repeater) - я не уверен, к чему вы пытаетесь привязать SelectedValue. По-видимому, ни то, ни другое не является .NET - поскольку, вероятно, именно здесь и возникает ошибка.

Откуда должен взяться Connect_ToProjectId?

У меня была аналогичная проблема с привязанными раскрывающимися списками в FormView. Я обошел это, установив выбранное значение вручную в "OnDataBound" формы.

(не знаю, откуда у вас ConnectToProject_ID)

FormView fv = (FormView)sender;
DropDownList ddl = (DropDownList)fv.FindControl("ProjectList");
ddl.SelectedValue = String.Format("{0:D}", ConnectToProject_ID);

Когда вы будете готовы к сохранению, используйте событие OnItemInserting:

FormView fv = (FormView)sender;
DropDownList ddl = (DropDownList)fv.FindControl("ProjectList");
e.Values["ConnectToProject_ID"] = ddl.SelectedValue;

или "OnItemUpdating"

Когда вы будете готовы к сохранению, используйте событие OnItemInserting:

FormView fv = (FormView)sender;
DropDownList ddl = (DropDownList)fv.FindControl("ProjectList");
e.NewValues["ConnectToProject_ID"] = ddl.SelectedValue;

Другие вопросы по теме