asp.net中级联下拉的数据绑定错误

时间:2011-09-26 00:31:24

标签: asp.net objectdatasource

我在表单视图的编辑项模板中有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下拉列表中获取值。但是这似乎不起作用,因为对象数据源上的select参数无法在窗体视图中看到控件。

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

 <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();           
    }

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

1 个答案:

答案 0 :(得分:1)

  

最初我想在对象上使用控件选择参数   模型的数据源下拉列表。随着参数得到   Make下拉值。然而,这似乎不起作用   对象数据源上的select参数无法看到控件   在表单视图中。


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

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