出于某种原因,我真的在与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下拉列表中显示该列表,以及知道在执行后期操作后选择了哪个项目?
答案 0 :(得分:1)
您已将下拉列表命名为ProductsList
,但您的模型不包含具有该名称的属性。将其更改为SelectedID
,使其与您要绑定的属性相匹配。
请注意,建议您使用强类型版
@(Html.Kendo().DropDownListFor(m => m.SelectedID) ....
现在提交时,viewModel.SelectedID
的值将是选择选项的值。
旁注:没有必要设置Selected = false
的{{1}}属性(默认情况下为SelectListItem
),但无论如何在强烈绑定到模型属性时会忽略它。您首次呈现视图时将选择第3个选项,因为false
您可以选择SelectedID = 3;
。
另请注意,value="3"
属性为空,因为您不为视图中的每个SelectList
生成控件(也不应该)。如果您返回重新填充集合的视图,请确保。