Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net jQuery$.post上的MVC 4 PartialViewResult缓存_Asp.net_Asp.net Mvc 3_Jquery_Asp.net Mvc 4 - Fatal编程技术网

Asp.net jQuery$.post上的MVC 4 PartialViewResult缓存

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,等等 控制器

我有一个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
,但仍然无法将其缓存。