我发现控制器操作中来自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”类型的属性
看起来模型属性名称和网格中绑定的名称是一致的。请告诉我这里可能缺少的东西。非常感谢任何帮助,因为我对此已经用尽了。
答案 0 :(得分:1)
如果Skills
为List<T>
,请将您的操作装饰为:
[HttpPost]
public ActionResult UpdateExperience(T model)
{
------
}
您正在为网格提供不同的模型,并强制发布父模型EditCandidateExperienceViewModel
。
答案 1 :(得分:1)
您必须从网格中传递模型列表。为此,您必须将IEnumerable
或IList
类型的列表传递给控制器。