如何在另一个ContentPlaceHolder中使用ObjectDataSource?

时间:2016-12-15 16:23:41

标签: asp.net webforms

我正在尝试将ObjectDataSource用于多个DropDownList,但所有这些都不在一个ContentPlaceHolder中。所以代码正在编译,但我得到了这个例外:

An exception of type 'System.Web.HttpException' occurred in System.Web.dll but was not handled in user code

Additional information: The DataSourceID of 'DROPDOWNLIST_NAME' must be the ID of a control of type IDataSource.  A control with ID 'OBJECTDATASOURCE_NAME' could not be found.

显然我无法将它们全部移动到一个地方,我也不打算复制ObjectDataSource!

2 个答案:

答案 0 :(得分:1)

您应该在另一个ContentPlaceHolder中使用控件的DataSourceID的特殊格式(在我的情况下,DropDownList不在ObjectDataSource的相同ContentPlaceHolder中)。

假设具有ObjectDataSource的ContentPlaceHolder是 CPH 而ObjectDataSource Id是 OBJDS ,那么绑定控件的DataSourceId应该是这样的:

<强>的DataSourceID = “CPH $ OBJDS”

答案 1 :(得分:0)

我建议不要使用ObjectDataSource并手动填充下拉列表控件。因此,您可以划分业务逻辑和UI。 例如:

public void GetItems(ListControl list, bool emptyElement)
{
     if (list == null)
        return;

     list.Items.Clear();

     if (emptyElement)
        list.Items.Add(new ListItem("Select", ""));

     IList<MyClass> foos = Controller.LoadRecords();
     foreach (MyClass foo in foos)
     {
         ListItem item = new ListItem(foo.Description, foo.Id.ToString());
         list.Items.Add(item);
     }
}

使用

调用
Manager.GetItems(myDropDownList, true);