由于某种原因,我真的对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)
)
现在,当执行我的发布操作时,我获得了传入的DataViewModel参数值,但是SelectList属性为空,并且我不知道用户在列表中选择了哪个项目。我希望传递给我的post操作的DataViewModel看起来与传递给视图的DataViewModel完全一样,只是发生了什么变化。即我希望SelectList包含与传递给视图相同的4个项目,并且将“实际选中的”属性设置为true的“ Selected”属性设置为true。现在我知道我的假设是错误的。因此,我的问题是,如何将模型传递到包含项列表的视图,在剑道下拉列表中显示该列表,并知道在执行post操作后选择了哪个项?
您已经为下拉列表指定了名称,ProductsList
但是您的模型不包含具有该名称的属性。更改为SelectedID
,使其与您要绑定的属性相匹配。
请注意,建议您使用强类型版本
@(Html.Kendo().DropDownListFor(m => m.SelectedID) ....
现在,当您提交时,的值viewModel.SelectedID
将是选择选项的值。
旁注:毫无意义地设置(默认情况下)它的Selected = false
属性,但是在任何情况下,当您强烈绑定到模型属性时,都将忽略它。当您第一次渲染视图时,您的第三个选项将被选中,因为并且您有一个带有的选项。SelectListItem
false
SelectedID = 3;
value="3"
还要注意,该SelectList
属性将为空,因为您不会为SelectListItem
视图中的每个控件生成控件(也不应该)。确保如果返回视图,则重新填充集合。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句