我一直在抓我的头对这个有一段时间了,并已决定让SO社区采取裂缝它... ...不一致的属性名外壳中产生JsonResult
我有回应一些操作从客户端是做简单的任务,并返回一个匿名类来构建一个简单的布尔“成功”属性JsonResult
如果成功,或返回PartialViewResult
与ModelState
错误,如果行动是不成功的文章:
<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 }
^
在success
的s
是小写,因为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:="*")>
,从JSON中删除了.Random
属性,但仍收到{ success: true }
。
我已经尽力回收应用程序池,删除临时.NET文件并清除浏览器缓存,并且同样的问题仍然存在。