В моей форме есть 2 DropDownList
элемента управления, второй из которых использует SelectedValue
первого в качестве одного из параметров привязки.
Оба DropDownList
элемента управления находятся в FormView.InsertItemTemplate
со свойствами SelectedValue
, привязанными к источнику данных FormView
с помощью выражения привязки.
При первом рендеринге FormView
в режиме вставки все работает нормально. Проблема в том, что после AutoPostBack
из первого DropDownList
FormView
не (повторно) связывается, однако, поскольку ControlParameter
во втором DropDownList
изменилось, он ДЕЙСТВИТЕЛЬНО связывает (как и предполагалось), но возникает исключение в выражении привязки для второй DDL, как я предполагаю, поскольку FormView
не привязан к этому проходу:
System.InvalidOperationException: методы привязки данных, такие как Eval (), XPath () и Bind (), могут использоваться только в контексте элемента управления привязкой к данным.
Вот разметка:
<InsertItemTemplate>
.
.
.
<tr class="GridViewRowB">
<td class="GridViewCell">
Offense Type
</td>
<td class="GridViewCell">
<asp:DropDownList ID="ddlOffenseType" runat="server" DataSourceID="dsOffenseType"
AutoPostBack="true" DataValueField="OffenseTypeID" DataTextField="Description"
SelectedValue='<%# Bind("OffenseTypeID") %>'>
</asp:DropDownList>
<asp:ObjectDataSource ID="dsOffenseType" runat="server" TypeName="OffenseType"
SelectMethod="GetAll">
<SelectParameters>
<asp:Parameter Name="ActiveOnly" DefaultValue="True" Type="Boolean" />
</SelectParameters>
</asp:ObjectDataSource>
</td>
</tr>
<tr class="GridViewRowA">
<td class="GridViewCell">
Attorney
</td>
<td class="GridViewCell">
<asp:DropDownList ID="ddlAttorney" runat="server" DataSourceID="dsAttorney" DataValueField="AttorneyID"
DataTextField="AttorneyNameWithCount" SelectedValue='<%# Bind("AttorneyID") %>'>
</asp:DropDownList>
<asp:ObjectDataSource ID="dsAttorney" runat="server" TypeName="Attorney"
SelectMethod="GetAttorneyWithCaseCount">
<SelectParameters>
<asp:Parameter Name="ActiveOnly" DefaultValue="True" Type="Boolean" />
<asp:ControlParameter Name="OffenseTypeID" Type="Int32" ControlID="ddlOffenseType"
PropertyName="SelectedValue" />
</SelectParameters>
</asp:ObjectDataSource>
</td>
</tr>
.
.
.
</InsertItemTemplate>
Мой вопрос: как лучше всего заставить эту функцию работать? Можно ли сохранить оба DDL в шаблоне? Я бы предпочел избегать использования набора инструментов AJAX или других клиентских решений.