ASP.NET DropDownList не сохраняет выбранный элемент при обратной передаче - PullRequest
16 голосов
/ 16 ноября 2010

У меня есть ASP DropDownList, который заполняется в событии Page_Load, после того, как я выбираю элемент и нажимаю кнопку, выбранный элемент очищается и выбирается первый элемент в DropDownList.(DropDownList заполняется только тогда, когда страница не отправляется обратно)

Помогите пожалуйста

   if (!IsPostBack)
    {
            List<Country> lCountries = new List<Country>();
            List<CompanySchedule> lCompanySchedules = new List<CompanySchedule>();
            this.Load_Countries(lCountries);
            this.Load_Schedules(lCompanySchedules);
            if (personnelRec == null)
            { personnelRec = new Personnel(); }
        if (Request.QueryString["UA"] != null && Convert.ToInt32(Request.QueryString["UA"].ToString()) > 0)
        {
            userAccount.ID = Convert.ToInt32(Request.QueryString["UA"].ToString());
            App_Database.Snapshift_Select_Helper.SNAPSHIFT_SELECT_PERSONNEL_APP_ACCOUNT(ref userAccount);
        }
            this.imgEmployeePicture.ImageUrl = "./images/Employees/nophoto.gif";
            if (Request.QueryString["EI"] != null && Convert.ToInt32(Request.QueryString["EI"].ToString()) > 0)
            {
                this.Load_PersonnelRec(Convert.ToInt32(Request.QueryString["EI"].ToString()));
            }
            else
            {
                this.lblChangeDirectionHead.Enabled = false;
                this.lblChangeDirections.Enabled = false;
                this.lbSchedules.Disabled = true;
            }
    }

Ответы [ 2 ]

34 голосов
/ 16 ноября 2010

Жизненный цикл страницы выполняет следующие действия (плюс другие шаги, не относящиеся к вашему вопросу):

  1. OnInit
  2. Заполнение элементов управления из ViewState (при обратной передаче)
  3. Установите выбранные значения (во время обратной передачи)
  4. Page_Load

Вам необходимо включить ViewState, чтобы он мог заполнять список, прежде чем он "выберет" элемент.В этом случае убедитесь, что вы не переполняете в Page_Load и не теряете выбранное значение.Сделайте что-то вроде if (!IsPostback) { // Populate }

В противном случае вам придется заполнять список вручную в событии OnInit при каждом запросе страницы.Page_Load слишком поздно в жизненном цикле, поэтому выбранный элемент теряется.

Редактировать:

Для DropDownList также должны быть установлены допустимые значения (отдельно оттекст отображается в браузере).Это делается через свойство DataValueField.Каждое значение должно быть уникальным, иначе будет выбран только первый дубликат элемента.Если вы посмотрите на источник HTML в своем браузере, у вас должно быть:

<select>
    <option value="unique_value1">Displayed text1</option>
    <option value="unique_value2">Displayed text2</option>
</select>

Уникальные значения используются для выбора нужного элемента на стороне сервера.

3 голосов
/ 24 мая 2013

Используете ли вы мастер-страницу?Если это так, не забудьте поставить EnableViewState на true на главной странице.

...