在控制器操作中,来自kendo网格的已发布模型属性为null

时间:2013-10-07 19:56:17

标签: asp.net-mvc kendo-grid

我发现控制器操作中来自kendo网格的已发布模型为空。这里有很多相关的论坛,但我无法用作解决我的问题的方法。

cshtml中的这段代码如下:

@(Html.Kendo().Grid(Model.Skills)
.Name("skillGrid")
.Columns(columns =>
{
columns.Bound(p => p.SkillNameNew).ClientTemplate("#= SkillNameNew #" +
"<input type='hidden' name='Skills[#= index(data)#].SkillNameNew' value='#= SkillNameNew#' />")
.Title("Skill Name");

columns.Bound(p => p.SkillName).Hidden().ClientTemplate("#= SkillName #" +
"<input type='hidden' name='Skills[#= index(data)#].SkillName' value='#= SkillName #' />");

columns.Template(p => p.Proficiency).ClientTemplate("<div id='star' data-text='#: SkillName #' data-score='#: Proficiency #' role='rating' ></div>" +"<input type='hidden' id='prof' name='Skills[#= index(data)#].Proficiency' value='#= Proficiency #' />").Title("Proficiency");

columns.Bound(p => p.YearsOfExp).ClientTemplate("#= (YearsOfExp == null || YearsOfExp == ' ' || YearsOfExp == '') ? '' : kendo.parseInt(YearsOfExp) #" + "<input type='hidden' name='Skills[#= index(data)#].YearsOfExp' value='#= YearsOfExp #' />").Title("Years Of Exp");

columns.Bound(p => p.LastUsedYear).ClientTemplate("#= (LastUsedYear == null || LastUsedYear == '0' || LastUsedYear == '') ? '' : kendo.parseInt(LastUsedYear) #" +"<input type='hidden' name='Skills[#= index(data)#].LastUsedYear' value='#=LastUsedYear#' />").Title("Last Used Year");

columns.Command(command => command.Destroy()).Width(40);})
.Editable(editable => editable.Mode(GridEditMode.InCell))
.Events(events => events.DataBound("DataBound"))
.Resizable(re => re.Columns(true))
.Reorderable(reorder => reorder.Columns(false))
.Sortable()
.Scrollable(scroll => scroll.Virtual(true))
.Groupable()
.Filterable()
.HtmlAttributes(new { style = "height:100%;" })
.DataSource(d => d.Ajax()
                   .Batch(true)
                   .ServerOperation(false)
                   .PageSize(Constants.DEFAULT_PAGE_SIZE)
                   .Model(model => model.Id(l => l.SkillName))

控制器操作具有以下签名:

[HttpPost]
public ActionResult UpdateExperience(EditCandidateExperienceViewModel model)
{
------
}

技能是“EditCandidateExperienceViewModel”中“List”类型的属性

看起来模型属性名称和网格中绑定的名称是一致的。请告诉我这里可能缺少的东西。非常感谢任何帮助,因为我对此已经用尽了。

2 个答案:

答案 0 :(得分:1)

如果SkillsList<T>,请将您的操作装饰为:

[HttpPost]
public ActionResult UpdateExperience(T model)
{
  ------
}

您正在为网格提供不同的模型,并强制发布父模型EditCandidateExperienceViewModel

答案 1 :(得分:1)

您必须从网格中传递模型列表。为此,您必须将IEnumerableIList类型的列表传递给控制器​​。