我正在调用MVC控制器方法并将其传递给Entity
对象。在其他属性中,Entity
也具有Contacts
属性。使用这种方法,控制器获取实体,并在实体内获得正确数量的联系人,但所有联系人的属性都为空。
这是最初的方法:
$.post('/Home/Save', $.param(entity), SaveComplete);
使用强类型控制器:
public ActionResult Save(Entity entity)
这会导致每个Entity.Contact
具有空属性:
Fiddler表示联系人已传递到服务器。
要让控制器识别Entity的Contacts属性,我必须这样做:
JavaScript的:
$.post('/Home/Save', { entityAsJson: JSON.stringify(entity) }, SaveComplete);
控制器方法:
public ActionResult Save(string entityAsJson)
{
try
{
Entity entity = JsonConvert.DeserializeObject<Entity>(entityAsJson);
// more code here
}
}
这很不幸,因为现在我的控制器采用字符串而不是强类型实体。有没有办法让第一个选项工作,或者我是否需要对JSON进行字符串化?
答案 0 :(得分:4)
为了在控制器操作中使用强类型参数并使用正确绑定的ajax发送数据(包括集合属性),您需要执行以下操作:
$.ajax
代替$.post
,因为$.post
不允许配置contentType
选项JSON.stringfy
您的数据contentType
设置为"application/json"
,因为这会告诉ASP.NET MVC为JSON使用正确的模型绑定器因此,以下代码应与原始控制器操作一起使用:
$.ajax({
url: '/Home/Save',
type: 'POST',
data: JSON.stringify(entity),
contentType: "application/json",
success: SaveComplete
});
答案 1 :(得分:0)
在你的情况下,我不知道你为什么要发布javascript帖子。如果它是强类型绑定,那么只需执行以下操作:
(1)包裹您的控件,使用块(表格)下的提交按钮 (2)调用应将您的班级名称作为参数的行动。
e.g:
Public Action Result (YourClassName model) { Your sample Code }
在模型中,你将得到你在视图中填写的任何内容......