gpt4 book ai didi

asp.net - 在模板化控件中实现级联 DropDownList 绑定(bind)

转载 作者:行者123 更新时间:2023-12-04 16:41:06 24 4
gpt4 key购买 nike

我有 2 DropDownList我的表单上的控件,其中第二个使用 SelectedValue第一个作为其绑定(bind)参数之一。

两个DropDownList控件位于 FormView.InsertItemTemplateSelectedValue绑定(bind)到 FormView 的属性的数据源使用绑定(bind)表达式。

第一次FormView以插入模式呈现,一切正常。问题出在 AutoPostBack 之后从第一个 DropDownList , FormView不(重新)绑定(bind),但是因为 ControlParameter在第二个 DropDownList已更改,它确实绑定(bind)(如预期的那样),但第二个 DDL 的绑定(bind)表达式发生异常,我假设因为 FormView对该通行证没有约束力:

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



这是标记:
<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 工具包或其他客户端解决方案。

最佳答案

当我们在数据绑定(bind)控件(如 DetailsView/FormView)中使用级联下拉列表时,这是一个问题。我已经多次面对它。您必须从第二个下拉列表中删除绑定(bind)表达式 SelectedValue='<%# Bind("AttorneyID") %>' ,然后它会工作。

其次,如果您删除 Binding 表达式,则必须在 FormView ItemInserting 中手动传递值事件。例如

 protected void frmAsset_ItemInserting(object sender, FormViewInsertEventArgs e)
{
eValues["AttorneyID"] = ((DropDownList)((FormView)sender).FindControl("ddlAttorny")).SelectedValue;
}

关于asp.net - 在模板化控件中实现级联 DropDownList 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6749944/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com