我在asp.net mvc视图中有以下内容: -
<div class=" b" >Show @Html.DropDownList("type", new SelectList(ViewBag.type, "Value", "Text", "" ), new { @id= "typeOptions",@class="SmallDropDown3"}) Requestors.
<img src="~/Content/sortloading.gif" class="loadingimage" id="progressSort3" /></div>
@Html.Partial("_GetRequestors", Model)
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
<script>
$("body").on('change', '#typeOptions', function () {
$('#progressSort3').show();
$.ajax({
type: "Get",
url: '@Url.Action("GetRequestors","Customer")',
data: { id: "@ViewBag.AccountID", page: "1", type: $("#typeOptions").val() },
success: function (html) {
$('#RequestorTable').html(html);
$('#progressSort3').hide(); //This could also be dialog("open") depending on the version of jquery ui.
}
});
});
</script>
其中主要显示一个dropdownlsit,它将在列表项更改时启动Ajax调用。以下是将被调用的操作方法: -
public ActionResult GetRequestors (int id = 0,int page=1,string type="")
{
int pagesize;
ViewBag.type = ViewBag.PagedSizeOptions = new PageOptions().RequestorTypeOptions;
bool succeed = int.TryParse(System.Web.Configuration.WebConfigurationManager.AppSettings["TechPageSize"], out pagesize);
var aUser = repository.populateRequestorDetials2(id,type).OrderBy(a=>a.FIRST_NAME).ToPagedList(page, pagesize);
ViewBag.AccountID = id;
ViewBag.currenttype = type;
if (Request.IsAjaxRequest())
{
return PartialView("_GetRequestors", aUser);
}
return View(aUser);
}
目前似乎IE会长时间缓存结果,并且当更改dropdpwnlist IE时将始终显示相同下拉项的缓存结果,即使进行硬刷新(ctrl-f5)也不会删除缓存结果... 所以我主要有这两个问题: -
IE将保留缓存数据多长时间?
我知道我可以添加cache:false作为ajax参数。但问题是,如果我在IE的Ajax调用中没有指定任何缓存设置,那么默认行为是什么。如在chrome和firefox中将不会遇到缓存问题?
任何人都可以就这些问题提出建议吗?
感谢。
答案 0 :(得分:2)
您可以使用ajaxSetup来阻止缓存。
示例强>
$.ajaxSetup({ cache: false });
或者,如果您只是想要该请求,您可以:
$.ajax({
type: "Get",
cache: false,
url: '@Url.Action("GetRequestors","Customer")',
data: { id: "@ViewBag.AccountID", page: "1", type: $("#typeOptions").val() },
success: function (html) {
$('#RequestorTable').html(html);
$('#progressSort3').hide(); //This could also be dialog("open") depending on the version of jquery ui.
}
});
答案 1 :(得分:2)
缓存持续时间由服务器设置指定,而不是IE。
所有浏览器应以相同的方式缓存,但无法保证。
Razor缓存应该解决服务器端,因为你有更多的选择和灵活性,而不是导致请求缓存的原因(例如,基于参数更改)。
停止缓存的最简单选项是在部分视图操作上添加以下内容:
[OutputCache(Duration = 1)]
public ActionResult GetRequestors (int id = 0,int page=1,string type="")
这会将缓存设置为1秒。 0不是部分视图的有效选项。
注意:我假设您的代码返回部分视图。整页视图的选项不同(更简单)
答案 2 :(得分:0)
将"?" + (new Date()).getTime()
添加到您网址的末尾。
即:
$.ajax({
type: "Get",
url: '@Url.Action("GetRequestors","Customer")' + "?" + (new Date()).getTime(),
data: { id: "@ViewBag.AccountID", page: "1", type: $("#typeOptions").val() },
success: function (html) {
$('#RequestorTable').html(html);
$('#progressSort3').hide(); //This could also be dialog("open") depending on the version of jquery ui.
}
});