Проблема в том, что когда вы связываете данные с раскрывающимся списком подкатегорий, контекст привязки данных отсутствует (см. здесь для получения дополнительной информации, обратите внимание на комментарии Дэвида Фаулера).Я не думаю, что UpdatePanel является проблемой, так как поведение одинаково с или без него (и если вы оберните весь DetailsView в UpdatePanel).
Решение состоит в том, чтобы загружать элементы по отдельности вместо данных, привязывающих элемент управления.Это кажется немного неуклюжим, я признаю, но это работает.
protected void category_select_index_changed(object sender, EventArgs e)
{
DropDownList ddl_categories = (DropDownList)dvw.FindControl("ddl_categories");
IEnumerable<SUBCATEGORY> sections = new SUBCATEGORY[] { new SUBCATEGORY() { Name = "First " + ddl_categories.SelectedValue, Subcategory_id = "1" }, new SUBCATEGORY() { Name = "Second", Subcategory_id = "2" } };
DropDownList ddl_subcategories = (DropDownList)dvw.FindControl("ddl_subcategories");
ddl_subcategories.Items.Clear();
foreach (SUBCATEGORY cat in sections)
{
ddl_subcategories.Items.Add(new ListItem(cat.Name, cat.Subcategory_id));
}
}
Лучшим вариантом было бы не использовать Bind в элементе управления, а просто установить значение в параметрах ObjectDataSource при вставке / обновлении.
Обновление: можно установить ObjectDataSource значение напрямую.Добавьте обработчик события для OnInserting (или OnUpdating при необходимости) следующим образом:
protected void ods_OnInserting(object sender, ObjectDataSourceMethodEventArgs e)
{
DropDownList ddl_subcategories = (DropDownList)dvw.FindControl("ddl_subcategories");
e.InputParameters["Subcategory_id"] = ddl_subcategories.SelectedValue;
}
Я не могу на самом деле проверить это сейчас, но оно должнобыть рядом.