Получить выбранную роль при редактировании или обновлении - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть 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 , тогда при редактировании роль администратора должна быть выбрана по умолчанию вместе с другими значениями в 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 голосов
/ 30 ноября 2018

Переместите ваш foreach после функции LoadDropDownBox (), потому что у выпадающего меню нет загруженных значений до этого.

Тогда, если вы знаете, что ваш выпадающий список содержит значение FOR SURE, тогда вы можете просто сделать

ddlUserRole.SelectedValue = item.roleId.ToString();

В противном случае вам необходимо выполнить проверку, чтобы предотвратить ошибку, например:

ListItem selectedListItem = ddlUserRole.Items.FindByValue(item.roleId.ToString());

if (selectedListItem != null)
{
    selectedListItem.Selected = true;
}

Ваш окончательный код должен выглядеть следующим образом:

        if(!IsPostBack)
           {

              LoadDropDownBox();  

    foreach (var item in aDbOperations.GetUserWithId(id)) //Passing query string here to match the id of the editing details
              { 
                ListItem selectedListItem = ddlUserRole.Items.FindByValue(item.roleId.ToString());

if (selectedListItem != null)
{
    selectedListItem.Selected = true;
}
              }
           }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...