我在我的MVC 4应用程序中有以下Kendo UI DropDownListFor,当我提交时,我得到的值不能为null。
@Html.Kendo()
.DropDownListFor(m => m.JobTitle)
.BindTo(ViewData["Jobs"] as SelectList)
通常我会使用viewmodel来处理绑定,但在这种情况下,这不是一个选项,所以我试图用ViewData列表填充我的列表。该列表可以很好地加载到下拉列表中,但它不会将我的选择与JobTitle值相关联。任何有关这方面的建议都会非常感激,因为我已经尝试了所有我能想到的东西。
答案 0 :(得分:3)
当我省略指定Name
属性时,我也遇到了同样的问题。
答案 1 :(得分:2)
您是否为包装器指定了DataTextField()和DataValueField()属性?
e.g。
@Html.Kendo().DropDownListFor(m => m.JobTitle)
.OptionLabel("Select Job Title...")
.DataTextField("text")
.DataValueField("value")
.BindTo(ViewData["Jobs"] as SelectList)
更新
List<SelectListItem> JobTitles = new List<SelectListItem>();
JobTitles.Add(new SelectListItem { Value="One", Text = "One"});
JobTitles.Add(new SelectListItem { Value="Two", Text = "Two"});
JobTitles.Add(new SelectListItem { Value="Three", Text = "Three"});
JobTitles.Add(new SelectListItem { Value = "Four", Text = "Four" });
SelectList jobs = new SelectList(JobTitles, "value","text");
ViewData["Jobs"] = jobs;
更新2:
@Html.HiddenFor(m => m.JobTitle)
@(Html.Kendo().DropDownList().Name("JobTitlesList").OptionLabel("Select Job Title...").Events(e => {
e.Change("listChange");
}).BindTo(new SelectList((IEnumerable<string>)ViewData["Jobs"])))
//JScript event handler
function listChange(e)
{
//console.log(e);
$('#JobTitle').val(e.sender.text());
}
答案 2 :(得分:2)
我遇到了同样的问题,但我不得不使用as IEnumerable
代替SelectList
来解决问题。
@(Html.Kendo().DropDownList()
.Name("ControlName")
.DataValueField("value")
.DataTextField("text")
.BindTo(ViewData["UnitList"] as IEnumerable)
在控制器中,ViewData的填充方式如下:
ViewData["prodUnits"] =
DbHelper.GetUnitList("Stuff");
和DbHelper看起来像这样:
public virtual IEnumerable<Object> GetUnitList(string thing)
{
using (var Db = new dbEntities())
{
return (from obj in Db.Units
where obj.things == thing
select new
{
value = obj.Unit_ID,
text = obj.Unit_Name
}).ToList().Distinct().OrderBy(obj => obj.value);
}
}
我老实说,我不理解这个,错误让我绝对不知道如果通过ViewData保存了IEnumerable,它看起来就像是类型。
答案 3 :(得分:1)
您可以尝试:代码
@(Html.Kendo().DropDownListFor(m => m)
.DataTextField("Text")
.DataValueField("Value")
.BindTo(new List<SelectListItem>() {
new SelectListItem() {
Text = "Select",
Value = null
},
new SelectListItem() {
Text = "Yes",
Value = true.ToString()
},
new SelectListItem() {
Text = "No",
Value = false.ToString()
}
})
.HtmlAttributes(new { data_value_primitive = "true" }))
任何建议:vishalroxx7@gmail.com