Kendo UI DropDownListFor值不能为null绑定错误

时间:2013-05-10 14:33:54

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

我在我的MVC 4应用程序中有以下Kendo UI DropDownListFor,当我提交时,我得到的值不能为null。

@Html.Kendo()
.DropDownListFor(m => m.JobTitle)
.BindTo(ViewData["Jobs"] as SelectList)

通常我会使用viewmodel来处理绑定,但在这种情况下,这不是一个选项,所以我试图用ViewData列表填充我的列表。该列表可以很好地加载到下拉列表中,但它不会将我的选择与JobTitle值相关联。任何有关这方面的建议都会非常感激,因为我已经尝试了所有我能想到的东西。

4 个答案:

答案 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

相关问题