我正在尝试将复杂对象作为表单对象发送到mvc控制器。但是我只收到一个带有默认值的new
对象。
这是对象(只是稍微修整一下以使示例更简单)
public class AddProjectPopupModel
{
public long SelectedCountryId;
public Project ResultProject { get; set; }
}
public class Project
{
public long Number;
public string Name;
}
以下是我创建表单的方式:
@using (Html.BeginForm("AddProjectResult", "Popups", FormMethod.Post, new { id = "addProjectForm"}))
{
@Html.EditorFor(model => model.ResultProject.Number, new { htmlAttributes = new { Id = "number", Class = "validate", Value = 0 } })
@Html.EditorFor(model => model.ResultProject.Name, new { htmlAttributes = new { Id = "name", Class = "validate" } })
}
现在我有一个调用以下javascript的按钮:
var form = $("#addProjectForm");
var data = form.serialize();
var url = form.attr('action');
$.ajax({
type: "POST",
url: url,
data: data,
success: function(result) {
debugger;
}
});
控制器:
[HttpPost]
public ActionResult AddProjectResult(AddProjectPopupModel model)
{
return Json(new { Success = true });
}
我也尝试将控制器参数更改为:
public ActionResult AddProjectResult(long SelectedCountryId, Project ResultProject)
此处SelectedCountryId
被正确填充,但不是项目。
我希望将整个AddProjectPopupModel
用作参数,而不是它的具体值。
但是我无法理解这一点。
电话的提琴手输出:
控制器中的调试器值:
答案 0 :(得分:1)
您的问题是,在您的项目对象中,您正在使用文件
public class Project
{
public long Number;
public string Name;
}
它们应该是属性,以便可以导航到
public class Project
{
public long Number { get; set; }
public string Name { get; set; }
}
这应该有效
我建议您阅读Model Binding以获取更多信息