Kendo DropdownList 选定值

Kendo DropdownList Selected Value

出于某种原因,我对 Kendo DropdownList 感到很吃力。我似乎无法弄清楚如何从控制器的 post 操作中获取所选项目。这是我的一个简单代码示例。

型号:

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
    }

查看代码:

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

现在,当我的 post 操作被执行时,我得到了一个传入的 DataViewModel 参数值,但是 SelectList 属性 是空的,我不知道用户选择了列表中的哪个项目.我希望传递给我的 post 操作的 DataViewModel 与传递给视图的 DataViewModel 完全一样,只是发生了一些变化。 IE。我希望 SelectList 包含传递给视图的相同 4 个项目以及 "Selected" 属性 设置为 true 的实际选择的项目。现在我知道我的假设是错误的。所以,我的问题是,如何将模型传递到包含项目列表的视图,在 kendo 下拉列表中显示该列表,并在执行 post 操作后知道选择了哪个项目?

您已将下拉列表命名为 ProductsList,但您的模型不包含具有该名称的 属性。将其更改为 SelectedID 以匹配您要绑定的 属性。

请注意,建议您使用强类型版本

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

现在提交时,viewModel.SelectedID的值将是选择选项的值。

旁注:设置 SelectListItemSelected = false 属性 没有意义(默认情况下为 false),但无论如何,当您强烈绑定到模型 属性。当您第一次渲染视图时,您的第三个选项将被选中,因为 SelectedID = 3; 并且您有一个选项 value="3".

另请注意,SelectList 属性 将为空,因为您不会为视图中的每个 SelectListItem 生成控件(您也不应该)。确保如果您 return 重新填充集合的视图。