Asp.net jQuery$.post上的MVC 4 PartialViewResult缓存
我有一个jQuery$.post返回到MVC4控制器,该控制器将返回PartialViewResult,并使用post中发送的数据进行渲染。调试部分视图和控制器时,将接收正确的数据并将其作为视图模型发送到部分视图。问题是,在分析AJAX结果中返回的HTML时,它似乎包含原始页面刷新中的“缓存”数据 我在这里看到了大量类似的帖子,但没有一篇与我的文章相同 我知道HTTP Post请求不会缓存在浏览器中,因此这不是问题所在。我还将OutputCache属性设置为NoStore=true,等等 控制器Asp.net jQuery$.post上的MVC 4 PartialViewResult缓存,asp.net,asp.net-mvc-3,jquery,asp.net-mvc-4,Asp.net,Asp.net Mvc 3,Jquery,Asp.net Mvc 4,我有一个jQuery$.post返回到MVC4控制器,该控制器将返回PartialViewResult,并使用post中发送的数据进行渲染。调试部分视图和控制器时,将接收正确的数据并将其作为视图模型发送到部分视图。问题是,在分析AJAX结果中返回的HTML时,它似乎包含原始页面刷新中的“缓存”数据 我在这里看到了大量类似的帖子,但没有一篇与我的文章相同 我知道HTTP Post请求不会缓存在浏览器中,因此这不是问题所在。我还将OutputCache属性设置为NoStore=true,等等 控制器
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
public partial class MyController : Controller
{
...
[HttpPost]
public virtual ActionResult UpdatePartial(MyViewModel myVm)
{
return this.PartialView("My/_Partial", myVm);
}
}
JS
$('.someButton').click(function () {
$.post(myAjaxUrl, $('form').serialize(), function (data) {
$('#myContent').html(data);
});
});
$('.someButton').click(function () {
$.ajax{(
url: myAjaxUrl,
data: myAjaxUrl,
success: function (data) {
$('#myContent').html(data);
},
cache: false
});
});
默认情况下,JQuery将缓存$.ajaxXMLHttpRequests(除非数据类型是script或jsonp)。由于$.post是通过$.ajax实现的,JQuery本身已经缓存了您的请求。下面的JS应该可以工作 JS
$('.someButton').click(function () {
$.post(myAjaxUrl, $('form').serialize(), function (data) {
$('#myContent').html(data);
});
});
$('.someButton').click(function () {
$.ajax{(
url: myAjaxUrl,
data: myAjaxUrl,
success: function (data) {
$('#myContent').html(data);
},
cache: false
});
});
如果post失败,您可能会发现处理错误事件是值得的。我可以通过添加
ModelState来解决此问题。在对模型执行任何操作之前,请清除
[HttpPost]
public virtual ActionResult UpdatePartial(PersonViewModel model)
{
ModelState.Clear();
model.FirstName += "1";
model.LastName += "1";
model.Age += 1;
return this.PartialView("../My/_Partial", model);
}
问题的答案由Tim Scott提供,包含更多信息和链接。使用Fiddler捕捉响应,并将响应正文与浏览器中的ajax响应进行比较。@Corneliu谢谢,它们是相同的。将缓存buster参数添加到ajax url中。虽然帖子应该不会被缓存,但我在某些情况下见过这种情况。我可以通过添加ModelState来解决这个问题。在对模型执行任何操作之前清除<代码>[HttpPost]公共虚拟操作结果更新部分(PersonViewModel model){ModelState.Clear();model.FirstName+=“1”;model.LastName+=“1”;model.Age+=1;返回此.PartialView(“../My/_Partial”,model);}
此ASP MVC的默认行为,ASP MVC假定当您呈现视图以响应表单发布时,由于验证错误而返回表单。因此,HTML助手在查看模型之前先查看ModelState
中的值,然后用以前的数据重新填充视图。Joe的解决方法是使用ModelState.Clear()清除ModelState
是解决此问题的最佳方法。默认情况下,JQuery将缓存$.ajax XMLHttpRequests
。那不是真的。浏览器仅缓存GET请求。POST请求(这是$.POST
使用的)永远不会被缓存。@DarinDimitrov如何强制$.POST
缓存HTTPPOST
操作?我在jquery中使用了OutputCache
属性来修饰操作结果和cache:true
,但仍然无法将其缓存。