我有一个DropDownList-ASP.NET
WebForm,其中填充了角色,并像下面的数据库所示进行了操作:
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
LoadDropDownBox();
}
}
public void LoadDropDownBox()
{
ddlUserRole.DataSource = aDbOperations.GetRoles(); //List of objects here
ddlUserRole.DataTextField = "roleName";
ddlUserRole.DataValueField = "roleId";
ddlUserRole.DataBind();
}
工作正常。现在,我的要求是在编辑或更新用户详细信息时获得用户的选定角色。因此,假设用户具有角色 Admin ,然后在编辑时默认情况下应选择admin角色以及 DropDownList 中的其他值。因此,我在相同的默认页面中尝试了以下操作:
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
foreach (var item in aDbOperations.GetUserWithId(id)) //Passing query string here to match the id of the editing details
{
ddlUserRole.Value = item.roleName; //Get the selected role name by default while editing user details
}
LoadDropDownBox();
}
}
甚至尝试过:
ddlUserRole.SelectedItem.Value = item.roleName;
尽管它不起作用,并且没有从数据库中获取默认选择的值以及其他角色值。这里有什么错过的吗?
更新-1 :即使尝试了以下方法,但仍未完成
if (ddlUserRole.Items.FindByText(item.roleName.ToString()) != null)
{
ddlUserRole.Items.FindByText(item.roleName.ToString()).Selected = true;
}
答案 0 :(得分:1)
在LoadDropDownBox()函数之后移动您的foreach,因为下拉列表在此之前没有加载值。
然后,如果您知道下拉列表中包含FOR SURE值,则可以执行
className
否则,您需要进行检查以防止出现类似这样的错误:
ddlUserRole.SelectedValue = item.roleId.ToString();
您的最终代码应如下所示:
ListItem selectedListItem = ddlUserRole.Items.FindByValue(item.roleId.ToString());
if (selectedListItem != null)
{
selectedListItem.Selected = true;
}