Как мне создать свою форму редактирования в asp.net где два выпадающих списка являются взаимозависимыми?

StackOverflow https://stackoverflow.com/questions/1066238

  •  21-08-2019
  •  | 
  •  

Вопрос

у меня небольшая проблема, я создаю страницу редактирования в своем asp.net приложении, где пользователь может редактировать свойства объекта.У меня есть два выпадающих списка (категория и группа), где количество групп зависит от выбранной категории.Моя цель - отобразить правильную категорию редактируемого объекта, затем загрузить список групп и выбрать правильную группу - проблема в том, что мое событие selectedindexchanged никогда не запускается.

Когда я загружаю свои категории в page_load и заполняю категории, код выглядит следующим образом:

protected void Page_Load(object sender, EventArgs e)
    { string editid= Request["edit"] == null ? null : Request["edit"].ToString();
        int id = Convert.ToInt32(editid);
        if (link == null)
        {
            link = BLLink.Load(id, blm);
        }
        if (!IsPostBack)
        {
            group = BLGroup.Load(link.GroupId, blm);
            category = BLCategory.Load(group.CategoryId, blm);

            List<BLCategory> categories = BLCategory.LoadAll();
            categoryDropDown.DataSource = categories;
            categoryDropDown.DataTextField = "CategoryName";
            categoryDropDown.DataValueField = "id";
            categoryDropDown.SelectedValue = category.id.ToString(); //this one doesnt cause the event to fire??? Doesnt matter if it is called after the databind() method
            categoryDropDown.DataBind();
        }

}

Обработчик событий, который я хотел бы выполнить, должен загрузить все группы, заполнить выпадающий список и выбрать правильный:

protected void categoryDropDown_SelectedIndexChanged(object sender, EventArgs e)
    {
        category = BLCategory.Load(Convert.ToInt32(categoryDropDown.SelectedValue), new TestModelDataContext());
        if (category != null)
        {
            List<BLGroup> groups = BLGroup.LoadAll(category.id);
            groupDropDown.DataSource = groups;
            groupDropDown.DataTextField = "GroupHeading";
            groupDropDown.DataValueField = "GroupId";
            groupDropDown.DataBind();
            if (group != null)
            {
                groupDropDown.SelectedValue = group.GroupId.ToString();
            }
            else
            {
                groupDropDown.SelectedIndex = 0;
            }
        }
    }

Я не знаю, что идет не так, это кажется простым делом, что я делаю не так?

Это было полезно?

Решение

Чтобы запустить это событие, страница должна выполнить обратную отправку при изменении выбора пользователя.Это приведет к обновлению всей страницы (но элементы управления должны сохранить свое состояние).

Это событие SelectedIndexChanged запущено на сервере, и я думаю, что в первом выпадающем списке есть свойство об отправке / обратной передаче, когда выбранный элемент изменяется на нем.

Чтобы добиться поведения на стороне клиента, вы можете сделать две вещи:
1) Оберните этот раздел в UpdatePanel и обновите второй список при изменении значения первого
2) Загрузите значения, используя клиентский код JavaScript, который запускается при изменении выбранного значения в первом, извлекает список и заполняет второе
2a) Вы можете либо написать сервис, который переносит вызов в источник данных и возвращает значения в виде JSON и т.д., либо 2b) Вы можете заполнить все значения для каждого возможного выбора скрытыми полями, которые каким-либо образом идентифицируются значениями в первом поле (это нежелательно, но возможно в зависимости от безопасности и размера ваших наборов данных).

Вариант 1 - это, вероятно, самый простой способ сохранить существующую кодовую базу и при этом получить поведение на стороне клиента.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top