【发布时间】:2017-02-24 11:45:53
【问题描述】:
我正在使用 ASP.NET MVC,我正在尝试创建一个页面来创建和编辑某个视图模型 ProjectVM。我遇到的问题是使用 Kendo Multiselect 在ProjectVM 中填充列表。该列表属于另一种模型类型,Staff。这是视图模型...
public class ProjectVM{
[Key]
public int ID { get; set; }
... //more items
public List<Staff> Staff { get; set; }
}
我尝试了很多不同的变体,例如将Staff 设为 IEnumerable 或数组。这是编辑器页面...
@model Site.Models.ProjectVM
@using (Ajax.BeginForm("Save", Model, new AjaxOptions() {HttpMethod = "post" })){
...
@(Html.Kendo().MultiSelectFor(M => m.Staff)
.BindTo(new SelectList((System.Collection.IEnumerable)ViewData["Staff"], "ID", "FullName"))
.Value(Model.Staff)
您可以推测,在加载页面时,我将所有 Staff 项目存储在 ViewData 中。上面根本没有从多选向控制器发送任何信息,并且在收到的视图模型中声称Staff 列表的大小为0,尽管我选择了。我试图摆脱表单并使用 Ajax POST 调用...
function save(){
$.ajax({
url: "Save",
type: "POST",
dataType: "json",
contentType: "application/json",
data: JSON.stringify({
ID: @Model.ID,
...
Staff: $("#Staff").data("kendoMultiSelect").dataItems(),
})
})
}
这获得了轻微的改进,因为控制器收到的列表现在显示正确的大小。但是,每个条目都填充了空白信息。我的控制器代码的标题...
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Save(ProjectVM vm){
... //vm has never been correct
}
任何建议将不胜感激。我研究过的所有东西要么不适合我的场景,要么不起作用。谢谢!
【问题讨论】:
-
您不能将
<select>绑定到复杂对象的集合(<select multiple>仅提交简单值数组)- 您需要绑定的属性必须是public IEnumerable<int> Staff { get; set; }跨度>
标签: asp.net ajax asp.net-mvc kendo-ui kendo-multiselect