Ajax Json 传递正确的数据,但方法获取具有空属性的对象
本文关键字:获取 方法 对象 属性 Json 数据 Ajax | 更新日期: 2023-09-27 18:37:17
我有一个Ajax调用,它将对象列表发送到控制器中的方法.
我查看了它发送的 json,一切似乎都井井有条。但是当它到达控制器时,列表就在那里,具有正确数量的对象,但它们的所有属性都是空的,即使值在 json 上正确设置也是如此。
示例:我有一个包含 10 个对象的 List,所有这些对象的属性都使用特定值设置。我执行调用,但是当列表到达控制器时,它有 10 个对象,它们的所有属性都将设置为 null。
有人知道为什么会这样吗?
这是调用:
由于数据量大,我不得不使用 post 而不是 get。
$("#testeFA").click(function()
{
<% JavaScriptSerializer serializador = new JavaScriptSerializer(); %>
var models = <%: MvcHtmlString.Create(serializador.Serialize(apontamentos)) %>
//"apontamentos" is the name of the List<ApontamentoModel>
$.post('<%: Url.Action("GeraFA") %>', { models: models }, function (sucesso)
{
//do whatever
}, 'json');
});
这是方法:
public JsonResult GeraFA(List<ApontamentoModel> models) <- this is where the list shows all the objects' properties as null
{
JsonResult result = new JsonResult();
//do whatever
result.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
return result;
}
这是 json 的一部分,所以你可以看到结构:
[{"DocEntry":1,
"LineID":5,
"Data":"01/06/2012",
"HoraInicial":
{"Ticks":288000000000,
"Days":0,
"Hours":8,
"Milliseconds":0,
"Minutes":0,
"Seconds":0,
"TotalDays":0.33333333333333331,
"TotalHours":8,
"TotalMilliseconds":28800000,
"TotalMinutes":480,
"TotalSeconds":28800},
"CodigoCliente":"C00013",
"Cliente":"Client Name",
"CodigoProjeto":283,
"Projeto":"Project Name",
"CodigoServico":18,
"TipoServico":"",
"CodigoDespesa":0,
"Despesa":"",
"Quantidade":0,
"NumeroChamado":0,
"NumeroFA":10,
"Apropria":true,
"Narrativa":"teste",
"NomeConsultor":"Name"},
{"DocEntry":1,
"LineID":13 //and so on to all the other elements
我正在使用 MVC2
ASP.NET MVC 2 不支持开箱即用的 JSON 请求。此功能已内置 ASP.NET MVC 3 中。不过,您可以编写自定义JsonValueProviderFactory
来实现这一点。Phil Haack写了一篇关于这个主题的优秀博客文章。您还需要使用 $.ajax
而不是 Phil 所示的$.post
,以便能够将application/json
请求设置为Content-Type
标头。
因此,在应用程序中下载并注册JsonValueProviderFactory
后,您可以:
$('#testeFA').click(function() {
<% JavaScriptSerializer serializador = new JavaScriptSerializer(); %>
//"apontamentos" is the name of the List<ApontamentoModel>
var models = <%= serializador.Serialize(apontamentos) %>;
$.ajax({
url: '<%= Url.Action("GeraFA") %>',
type: 'post',
contentType: 'application/json;charset=utf-8',
data: JSON.stringify({ models: models }),
success: function(result) {
//do whatever
}
});
});
另请注意 JSON.stringify
方法的用法,该方法将 javascript models
变量转换为要发送到 contentType
参数指定的服务器的 JSON 字符串。此方法是所有现代浏览器中的本机内置。如果您需要支持某些旧版浏览器,则可以在页面中包含 json2.js 脚本。