gpt4 book ai didi

jquery - 生成的 JsonResult 中的属性名称大小写不一致

转载 作者:行者123 更新时间:2023-12-01 01:50:03 28 4
gpt4 key购买 nike

我对此已经摸不着头脑有一段时间了,并决定让 SO 社区尝试一下......

我有一些操作可以响应客户端的 POST,执行简单的任务并返回 JsonResult如果成功,则从具有简单 bool “成功”属性的匿名类构建,否则返回 PartialViewResultModelState如果操作不成功,则会出现错误:

<HttpPost()> _
Public Function UpdateHeader(ByVal header As XmlReturnHeader) As ActionResult
If ModelState.IsValid Then
Dim updated As Integer = TaxRepository.XmlReturnHeader.Update(header)
If updated = 1 Then
Return Json(New With {.Success = True}, JsonRequestBehavior.AllowGet)
End If
End If
Return PartialView("Maintenance/Header", header)
End Function

在客户端,代码同样简单。我想看看结果是否有 Success属性,请确保它确实是true然后从那里开始:

$.post('<%= Url.Action("UpdateHeader") %>', $(this).serialize(), function (data) {
if (data.Success && data.Success === true) {
$('#list').trigger('reloadGrid');
$('#edit').dialog('close');
} else { // result must be the HTML
$('#edit').html(data);
}
});

但是,我在测试时遇到了问题。 data我从回调函数收到的对象总是如下所示:

{ success: true }
^

ssuccess是小写的,而且因为JS区分大小写,所以我遇到了问题。

奇怪的是,如果我将 VB.NET 代码更改为

Return Json(New With {.Garbage = True}, JsonRequestBehavior.AllowGet),

我会收到

{ Garbage: true } 

如果我把它改回New With { .Success = True } ,我再次看到小写的s

我使用IIS和IE9进行测试。我觉得响应以某种方式被缓存了。在应用程序中的其他地方,我使用小写的“成功”作为匿名 JsonResult 中的属性。范围。也许 IIS 正在缓存先前 GET 或 POST 请求的响应?

[更新]

为了测试响应缓存理论,我将代码更改为:

Return Json(New With {.Success = True, .Random = DateTime.Now.Ticks},
JsonRequestBehavior.AllowGet)

这导致客户端收到正确的响应。伟大的。但之前到底发生了什么?我以为 POST 可以免于缓存?或者这只是请求而不是响应?

以后如何避免这种情况?

[更新]

另一个花絮:我通过 jQuery 全局禁用缓存我的请求,但我没有任何 OutputCacheAttribute或服务器端采用的任何此类“无缓存”机制。我赶紧打了一巴掌<OutputCache(NoStore:=True, Duration:=0, VaryByParam:="*")>在整个 Controller 上,删除了 .Random来自 JSON 的属性,但仍然收到 { success: true }

我已经回收了应用程序池、删除了临时 .NET 文件并清除了浏览器缓存,但同样的问题仍然存在。

最佳答案

如果您还没有看过,您可能需要查看以下有关 ASP.net MVC 中的输出缓存的文章:http://juristr.com/blog/2012/10/output-caching-in-aspnet-mvc/

根据文章,默认响应 header 包括:

Cache-Control:private

这意味着 IE可以将响应缓存在私有(private)缓存中。本文提供了三个选项来禁用这些请求的缓存:在服务器上全局禁用它(出于客户端性能原因,我不建议这样做)、编写自定义全局操作过滤器(具有相同的结果)或向您的 Controller 操作称为 OutputCache:

<OutputCache(Duration:=0)>

虽然 jQuery 设置应该执行类似的功能,但它可能不会获得相同的结果。尝试一下,看看是否有效。

关于jquery - 生成的 JsonResult 中的属性名称大小写不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12961607/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com