Kendo DropdownList选定值

时间:2015-08-05 03:05:51

标签: asp.net asp.net-mvc asp.net-mvc-4 kendo-ui kendo-asp.net-mvc

出于某种原因,我真的在与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
    }

查看代码:

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

现在当我的post动作执行时,我得到一个传入的DataViewModel参数值,但是SelectList属性为空,我不知道用户选择了列表中的哪个项目。我期望传递给我的post操作的DataViewModel看起来与传递给视图的DataViewModel完全相同,但更改的内容除外。即我希望SelectList包含传递给视图的相同4个项目以及&#34; Selected&#34;对于实际选择的属性,属性设置为true。现在我知道我的假设是错误的。所以,我的问题是,如何将模型传递到包含项目列表的视图,在kendo下拉列表中显示该列表,以及知道在执行后期操作后选择了哪个项目?

1 个答案:

答案 0 :(得分:1)

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

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

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

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

旁注:没有必要设置Selected = false的{​​{1}}属性(默认情况下为SelectListItem),但无论如何在强烈绑定到模型属性时会忽略它。您首次呈现视图时将选择第3个选项,因为false您可以选​​择SelectedID = 3;

另请注意,value="3"属性为空,因为您不为视图中的每个SelectList生成控件(也不应该)。如果您返回重新填充集合的视图,请确保。