1

По какой-то причине я действительно боролся с Kendo DropdownList. Я не могу понять, как получить выбранный элемент из почтового действия моего контроллера. Вот простой пример кода, который у меня есть.Kendo DropdownList Выбранное значение

Модель:

public class DemoViewModel 
{ 
    public DemoViewModel() 
    { 
     SelectList = new List<SelectListItem>(); 
    } 
    public List<SelectListItem> SelectList { get; set; } 
    public string SelectedID { get; set; } 
} 

Действие контроллера:

public ActionResult Index() 
    { 
     ViewModel = new DemoViewModel(); 
     var oneItem = new SelectListItem() { Value = "1", Text = "Item 1", Selected = false }; 
     ViewModel.SelectList.Add(oneItem); 
     oneItem = new SelectListItem() { Value = "2", Text = "Item 2", Selected = false }; 
     ViewModel.SelectList.Add(oneItem); 
     oneItem = new SelectListItem() { Value = "3", Text = "Item 3", Selected = false }; 
     ViewModel.SelectList.Add(oneItem); 
     oneItem = new SelectListItem() { Value = "4", Text = "Item 4", Selected = false }; 
     ViewModel.SelectList.Add(oneItem); 


     ViewModel.SelectedID = "3"; 
     return View(ViewModel); 
    } 

    [HttpPost] 
    public ActionResult Index(DemoViewModel viewModel) 
    { 
     //Do something with the updated viewmodel 
    } 

View Code:

@(Html.Kendo().DropDownList() 
    .Name("ProductsList") 
    .BindTo(Model.SelectList) 
    .DataTextField("Text") 
    .DataValueField("Value") 
    .Value(Model.SelectedID) 
) 

теперь, когда мое сообщение действие выполняется, я получаю значение параметра DataViewModel передается в но свойство SelectList пустое, и я понятия не имею, какой элемент в списке был выбран пользователем. Я ожидал, что DataViewModel, который был передан моему посту, будет выглядеть точно так же, как тот, который был передан в представление, за исключением того, что изменилось. То есть Я ожидал, что SelectList будет содержать те же 4 элемента, которые были переданы в представление, плюс свойство «Выбранное», установленное в true для того, которое было фактически выбрано. Теперь я знаю, что мои предположения были неправильными. Итак, мой вопрос: как передать модель в мое представление, которое содержит список элементов, отобразить этот список в раскрывающемся списке кендо и узнать, какой элемент был выбран после выполнения действия post?

ответ

1

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

Примечание это рекомендуется использовать сильно типизированных версию

@(Html.Kendo().DropDownListFor(m => m.SelectedID) .... 

Теперь, когда вы передаете значение viewModel.SelectedID будет значение варианта выбора.

Side Примечания: Там нет установки Selected = false свойства SelectListItem точки (его false по умолчанию), но в любом случае его игнорировали, когда вы прочно прикрепляться к модели собственности. Ваш третий вариант будет выбран, когда вы сначала визуализируете представление, потому что SelectedID = 3; и у вас есть опция с value="3".

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

Смежные вопросы