我从列表中获取选定对象时遇到问题。
我通过以下方式将用户集合绑定到下拉列表:
ddlContractors.DataSource = service.GetAllUsers();
ddlContractors.DataTextField = "Name";
ddlContractors.DataValueField = "Id";
ddlContractors.DataBind();
它正在运作。 但是当我尝试通过以下方式获取所选对象时:
var user = (User)ddlContractors.SelectedItem;
我明白了:
(User)ddlContractors.SelectedItem Cannot convert type 'System.Web.UI.WebControls.ListItem' to 'GWDSite.GWDService.User'
如何从下拉列表中获取对象用户?如果有必要,我可以更改列表控件的类型
答案 0 :(得分:4)
下拉列表中的值字段是字段“Id”而不是User对象。所以'SelectedItem'返回“Id”值 - 而不是对象。您可以使用该Id来查找User对象(来自会话或缓存或您可以保存的任何位置)
答案 1 :(得分:2)
SelectedItem属于ListItem类型,您不能将listItem强制转换回自定义类,即用户。
您只能获取与通过SelectedItem / SelectedValue
选择的项目相关联的文本或值您需要做的是使用该文本/值,并根据某个地方的文本/值检索相应的“用户”对象(取决于您的状态管理方式)。
答案 2 :(得分:1)
使用SelectedValue而不是SelectedItem
WEB APPLICATION
当你正在使用网络应用程序时,方法我将无法在这里工作。
您可以获取所选项目的ID,并使用此ID作为参数从服务层中检索对象,但是如果创建对象的成本高于使用缓存来存储对象并根据需要进行检索。
答案 3 :(得分:0)
让我展示一个小技巧(我不知道你是否以这种方式做事,但是它有效)...我假设服务.GetAllUsers()返回List<User>
(没问题)如果它返回DataTable或Array,则技巧仍然适用于相应的上下文)。那么,当你从ur ddlContractors中选择一个用户名时,你有一个SelectedIndex吗?存储它 -
int index = ddlContractors.SelectedIndex;
现在,由于List<User>
用作ddlContractors的DataSource,因此您希望User对象(其名称已被选中)位于List的相同索引处 -
User userObject = userList[index];