У меня есть вид формы, в шаблоне редактирования у меня есть два раскрывающихся списка. Выпадающий 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>
Любая помощь о том, как заставить это работать, будет очень приветствоваться.





Похоже, что элементы управления не привязаны к данным должным образом после обратной передачи.
Вы привязываете данные к первому раскрывающемуся списку на странице или в коде? Если 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;
Вы решили проблему, иначе я предложу вам другое элегантное решение?