【问题标题】:Data Binding Error in cascading Drop downs in asp.netasp.net中级联下拉菜单中的数据绑定错误
【发布时间】:2024-05-23 17:15:01
【问题描述】:

我在表单视图的编辑项模板中有 2 个下拉列表。第一个下拉列表包含一盏车辆品牌,第二个下拉列表包含车辆型号。模型列表需要通过从 Makes 下拉列表中的选择进行过滤。

这里有 2 个下拉列表

    <telerik:RadComboBox ID="RadComboBoxAssetMake" runat="server" DataTextField="AssetMakeName"
                                       SelectedValue='<%# Bind("MakeId") %>'         DataSourceID="odsAllAssetMakes" AutoPostBack="True" DataValueField="Id" Skin="Vista"
                                            Width="212px" OnSelectedIndexChanged="RadComboBoxAssetMake_SelectedIndexChanged">
                                            <telerik:Items>
                                                <telerik:RadComboBoxItem Text="" Value="" />
                                            </telerik:Items>

                                        </telerik:RadComboBox>
                                        <telerik:RadComboBox ID="RadComboBoxAssetModel" runat="server" DataTextField="AssetModelName"
                                     SelectedValue='<%# Bind("ModelId") %>'              DataSourceID="odsAssetModelByMake" DataValueField="Id" Skin="Vista" Width="212px">
                                            <telerik:Items>
                                                <telerik:RadComboBoxItem Text="" Value="" />
                                            </telerik:Items>
                                        </telerik:RadComboBox>

最初我想在模型下拉的对象数据源上使用控件选择参数。使用参数从 Make 下拉列表中获取值。但是,这似乎不起作用,因为对象数据源上的选择参数无法在表单视图中看到控件。

所以现在我尝试在对象数据源上使用会话选择参数。

 <asp:ObjectDataSource runat="server" ID="odsAssetModelByMake" DataObjectTypeName="GPSO.Repository.AssetModel"
    TypeName="GPSOnline.ATOMWebService" SelectMethod="GetAssetModelbyMake">
    <SelectParameters>                           
                  <asp:SessionParameter DbType="Guid" SessionField="assetMakeId" Name="assetMakeId"  />
    </SelectParameters>
</asp:ObjectDataSource>

但现在我收到此错误“Eval()、XPath() 和 Bind() 等数据绑定方法只能在数据绑定控件的上下文中使用。”当我尝试在 make 下拉列表的选定索引更改方法中对模型下拉列表进行数据绑定时。

protected void RadComboBoxAssetMake_SelectedIndexChanged(object o, RadComboBoxSelectedIndexChangedEventArgs e)
    {
        Session["assetMakeId"] = e.Value.ToString();
        ((RadComboBox) fvAsset.FindControl("RadComboBoxAssetModel")).DataBind();           
    }

有没有一种简单的方法来实现这种事情,看起来很常见的场景,必须有一个标准的方法来做到这一点?

【问题讨论】:

    标签: asp.net objectdatasource


    【解决方案1】:

    最初我想在对象上使用控件选择参数 模型的数据源下拉。随着参数获取 Make 下拉菜单中的值。但是,这似乎不起作用 对象数据源上的select参数看不到控件 在表单视图中。


    您需要将 ObjectDataSource 移动到模板中:

    <EditItemTemplate>  
       <telerik:RadComboBox ....
       <telerik:RadComboBox ....
       <asp:ObjectDataSource ....
       <asp:ObjectDataSource ....
    </EditItemTemplate>
    

    【讨论】:

    • 谢谢你,是的,这有点奏效,我能够回到在对象数据源上使用控制参数。但是,当我在 Make 下拉列表中选择不同的项目时,我仍然遇到相同的错误。虽然如果我从模型下拉列表中删除 "SelectedValue='" 它可以工作,但没有选择正确的模型。
    • 您还在使用选定的索引更改处理程序吗?