【发布时间】:2013-03-02 20:19:11
【问题描述】:
我正在调用一个 MVC 控制器方法并将其传递给一个 Entity 对象。在其他属性中,Entity 还具有 Contacts 属性。使用这种方法,控制器可以获取实体,以及实体中正确数量的联系人,但所有联系人的属性均为空。
这是原来的做法:
$.post('/Home/Save', $.param(entity), SaveComplete);
使用强类型控制器:
public ActionResult Save(Entity entity)
这会导致每个Entity.Contact 具有空属性:
并且 Fiddler 显示联系人被传递到服务器。
要让控制器识别实体的联系人属性,我必须这样做:
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 进行字符串化?
【问题讨论】:
-
检查here。最受好评的答案...
-
@AliRızaAdıyahşi 在该答案中,您建议三个选项中的哪一个?原始问题未显示对象内的集合;只有主对象的原始属性。
-
您不需要
JsonConvert.DeserializeObject。尝试简单地在客户端上进行 json 序列化,并让服务器保持原样(IE:接受“实体”对象)。 Asp.NET MVC 有它自己的 jsonvalueprovider。如果这不能解决问题,我记得有时读到,你必须跳过一些障碍才能让 MVC(我认为是 3)与从客户端传递的数组配合得很好。 -
我用
data: $('#form').serialize(),发模型 -
啊哈:找到了:haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx。这有点过时了,但我猜如果你符合指定的格式它应该可以工作:)
标签: javascript jquery asp.net-mvc-4