1

我的 MVC 4 应用程序中有以下 Kendo UI DropDownListFor ,并且在提交时出现 value cannot be null 错误。

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

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

4

4 回答 4

4

当我省略指定Name属性时,我也遇到了同样的问题。

于 2013-09-17T14:32:21.500 回答
2

您是否为包装器指定了 DataTextField() 和 DataValueField() 属性?

例如

         @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());
  }
于 2013-05-10T14:42:39.187 回答
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);
        }


    }

老实说,我不明白这一点,错误给我绝对没有任何线索,如果 IEnumerable 已通过 ViewData 保留,它看起来像是类型。

于 2014-08-08T00:02:06.033 回答
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

于 2014-04-21T07:43:32.120 回答