【发布时间】:2013-11-25 17:53:32
【问题描述】:
我无法绑定包含对象列表的模型。当我尝试将数据从控制器传递到视图时没有问题,但是当我想将数据发回时,我收到一条消息,该方法不存在。
我正在使用 ajax 调用并将 $form.serialize() 作为数据,并且可以在 fiddler 中看到包含所有数据的列表,但我没有运气绑定。
模型是:
public class Single
{
public int Id {get;set;}
public string Name {get;set;}
public List<SimpleDropdown> dddl {get;set;}
public int SelectedEmp {get;set;}
}
public class MainModel
{
public List<Single> main_model_list {get;set;}
}
在我的控制器中,目前的方法是:
[HttpPost]
public string SaveModel(MainModel model)
{
return "";
}
这个方法不会被调用,但是当我删除参数时调用工作。所以我确定绑定不起作用。我有一个更复杂的模型,但我尽可能地简化了它,但仍然无法让它工作。
所以我的问题是我如何测试它以查看问题所在?
编辑:
我目前没有代码,但该代码是有效的,因为我在项目的其他地方使用它。是这样的:
$("#form").submit(function( ) {
$.ajax({
url: "/Controller/SaveModel",
type: "POST",
data: $(this).serialize()
});
});
表单看起来像这样:
@using (Html.BeginForm("SaveModel", "Home", FormMethod.Post, new { id = "form" }))
{
@for (var z = 0; z < ViewBag.groupes.Length; z++)
{
<div style="border-left: 1px solid black">
<h1>@ViewBag.groupes[z]</h1>
</div>
}
@for (var i = 0; i < Model.main_model_list.Count; i++)
{
<div>@Html.LabelFor(x => x.main_model_list[i].Id)</div>
<div>@Html.LabelFor(x => x.main_model_list[i].Name)</div>
<div style="float: left">@Html.DropDownListFor(x => main_model_list[i].SelectedEmp, new SelectList(main_model_list[i].dddl, "Id", "Value", main_model_list[i].SelectedEmp), new { @class = "preferences_dd_lists" })</div>
}
}
【问题讨论】:
-
你的 ajax 调用在哪里?
-
如何输出视图?您是否偶然使用了
foreach? -
我正在使用 for 语句从 main_model_list 列表中传递所有元素及其属性。
-
@Aleks 你能显示你表单的html(查看源代码)吗?
-
@Aleks 你检查过 ajax 调用期间生成的 JSON 吗?它是否具有 MainModel 的正确属性?
标签: c# ajax asp.net-mvc jquery