Если вы хотите сохранить все Ajax-ified, вы должны сделать это без использования viewbag. Мой выпадающий список находится в отдельном шаблоне редактора. Все, что вам нужно сделать, это вернуть SelectList как JsonResult. Тем не менее, я рекомендовал делать это таким образом, только если вы ожидаете, что данные в этом поле со списком изменятся, пока пользователь находится на странице, потому что он вызывает метод сервера при каждом открытии комбо.
В моем примере ниже, поскольку пользователь может добавить категорию на той же странице, что и при выборе категории, мне нужно, чтобы он каждый раз попадал на сервер. Но на других страницах я использую привязку на стороне сервера (через ViewBag / ViewData), чтобы она попала на сервер только один раз.
Мой шаблон редактора:
@(Html.Telerik().ComboBox()
.Name("YourNameGoesHere")
.DataBinding(binding => binding.Ajax().Select("SelectCategoriesForComboBox","Shared")))
Тогда в контроллере:
public EquipmentEntities db = new EquipmentEntities();
public List<SelectListItem> CategoryList
{
get
{
var m = db.Categories
.Select(e => new{ Id = e.Id, Name = e.Name })
.OrderBy(e => e.name);
List<SelectListItem> sl = new SelectListItem(m.ToList(), "Id", "Name").ToList();
//insert a blank item as the first entry
sl.Insert(0, (new SelectListItem { Text = "", Value = string.Empty }));
return sl;
}
}
[HttpPost]
public ActionResult SelectCategoryForComboBox()
{
return new JsonResult { Data = CategoryList };
}
Может быть, я немного опоздал, но, надеюсь, это кому-нибудь поможет.