在编辑或更新时获取所选角色

时间:2018-11-30 17:45:16

标签: c# asp.net webforms

我有一个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;
}

1 个答案:

答案 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;
}