Как мне создать свою форму редактирования в asp.net где два выпадающих списка являются взаимозависимыми?
-
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 - это, вероятно, самый простой способ сохранить существующую кодовую базу и при этом получить поведение на стороне клиента.