我正在使用asp.net中的checkboxlist,我想做的是下一步:对于选定的用户从数据库中获取他的角色(假设角色先前被选中并存储到数据库中,这没关系!)现在我只是想要从数据库中填充具有所选角色的复选框列表(在上一步中)。
但不幸的是,我不能按照我想象的方式做到这一点,这是我的代码:
if (!IsPostBack)
{
int playerID = Convert.ToInt32(Request.QueryString["player"]);
var player = DAPlayers.GetByIgracId(playerID);
if (player != null)
{
checkboxRoles.DataSource=DAPlayers.GetAllRoles();
checkboxRoles.DataTextField = "Name";
player.Roles =DAPlayers.GetAllRolesByPlayer(player.playerID);
for (int i = 0; i < checkboxRoles.Items.Count; i++)
{
if(player.Roles.Contains(checkboxRoles.Items[i])) //HERE I GOT THE ERROR
checkboxRoles.Items[i].Selected = true;
}
}
}
错误号1:
无法转换为&#39; System.Web.UI.WebControls.ListItem&#39;至 &#39; MYPROJECT.Data.Roles&#39;
错误号码2:
最佳重载方法匹配 &#39; System.Collections.Generic.List.Contains(MYPROJECT.Data.Roles)&#39; 有一些无效的论点
我的角色课
`public partial class Roles { 公共角色() { this.UserRoles = new HashSet(); }
public int RoleID { get; set; }
public string Name { get; set; }
public string Desc { get; set; }
public virtual ICollection<UserRoles> UserRoles { get; set; }
}`
谢谢你们,
干杯!
答案 0 :(得分:1)
你需要像Text
一样调用checkboxRoles.Items[i].Text
属性,然后再进行比较,你必须将它与string
对象的Role
属性进行比较,这个属性不能说确保除非您发布Roles
类
根据您的评论:在这种情况下,获取Names
列表并与之比较
var roleNames = igrac.Roles.Select(r => r.Name);
if(roleNames.Contains(checkboxRoles.Items[i].Text))
checkboxRoles.Items[i].Selected = true;