C# DropDownList-获取所选项目的自定义属性

C# DropDownList-获取所选项目的自定义属性,c#,asp.net,drop-down-menu,C#,Asp.net,Drop Down Menu,我有一个自定义类,它已绑定到Dropdownlist public class RoleIdSelection { public string RoleID { get; set; } public string RoleDesc { get; set; } public string OrgCode { get; set; } public string OrgName { get; set; } publ

我有一个自定义类,它已绑定到Dropdownlist

public class RoleIdSelection
    {
        public string RoleID { get; set; }
        public string RoleDesc { get; set; }
        public string OrgCode { get; set; }
        public string OrgName { get; set; }
        public string link { get; set; }
    }


List<RoleIdSelection> lstRoles = new List<RoleIdSelection>();
ddlUserProfile.DataSource = lstRoles;
ddlUserProfile.DataTextField = "RoleDesc";
ddlUserProfile.DataValueField = "RoleId";
ddlUserProfile.DataBind();
但它显示了警告

无法将类型“System.Web.UI.WebControl.ListItem”转换为 通过引用转换、装箱转换、, 取消装箱转换,包装转换


您可以重新填充RoleIdSelection列表,然后使用所选值获取RoleIdSelection,也可以序列化RoleIdSelection列表并将其保存在隐藏字段中,以便在回发时检索。这两个选项中的后一个选项使您可以接受客户端的操作

这是第一个选择

//repopulate the List<RoleIdSelection>
List<RoleIdSelection> roles = GetTheRoles();

RoleIdSelection role = roles.First(r => r.RoleID==ddlUserProfile.SelectedItem.Value); 
//重新填充列表
列表角色=getheroles();
RoleIdSelection role=roles.First(r=>r.RoleID==ddlUserProfile.SelectedItem.Value);

现在角色有了正确的角色选择

非常有操控性。这将暂时拯救我。但是为什么asp.net不支持这种功能呢。我记得我在winforms中很容易做到这一点。@user2564977因为web本质上是无状态的。绑定的数据必须保存在ViewState中,该状态将发送到客户端。由于页面大小和安全问题,不一定要执行某些操作。因此,您不必直接获取所选项目,而是获取绑定项目的ID,然后将该信息从保存它的位置(数据库、会话、视图状态等)拉回来。
//repopulate the List<RoleIdSelection>
List<RoleIdSelection> roles = GetTheRoles();

RoleIdSelection role = roles.First(r => r.RoleID==ddlUserProfile.SelectedItem.Value);