将ASP.net DropDownList的SelectedValue绑定到自定义对象

时间:2010-02-15 12:27:19

标签: c# asp.net data-binding drop-down-menu selectedvalue

目前我在FormView中有一个DropDownList,数据绑定到ObjectDataSource。这是DropDownList,它有自己的数据源,返回一个部门列表:

<asp:DropDownList ID="DepartmentsList" DataSourceID="DepartmentsListDataSource" DataTextField="Name" SelectedValue='<%# Bind("Department") %>' runat="server" />

在FormView的数据源中,属性Department定义为:

public Department Department { get; set; }

在这种情况下,我得到了这个例外:

  

'DepartmentsList'有一个SelectedValue,它是无效的,因为它在项目列表中不存在。   参数名称:值

逻辑上我得到了这个异常,因为我没有在DropDownList上设置DataValueField。问题是,如果我想将完整的选定对象(部门)数据绑定回FormViews数据源,那么DataValueField的值必须是什么?

感谢。

2 个答案:

答案 0 :(得分:1)

我不知道是否可以将整个对象绑定为SelectedValue
您可以做的是将唯一标识符(例如ID)绑定到DataValueField,然后通过它的ID检索您的对象。
另一个(非常脏)解决方案是将所有相关属性(例如“;”分隔)放在DataValueField中,并用这些值构造对象......但是,as as说,真的很脏! ; - )

答案 1 :(得分:0)

可以将一个对象分配给DataValueField但它不会“工作”,因为它将被转换为字符串。这意味着您将为所有绑定选项使用相同的字符串值,该值可能是对象的类型或简单对象。一种方法可能是Pieter Nijs所说的一种方法,用一个字符来区分相关的对象属性,但就像他说这很脏。