我目前正在创建一个MVC应用程序,它基本上只是一个用于数据库内容的大型CRUD工具。 对于用于限制某些选择的小表(国家,类别,类似的东西),我创建了1个页面来加载所请求的表,并允许用户仅使用Ajax调用添加/删除/编辑属性。
加载页面后,用户会获得包含所有表名的下拉列表。提交后,将触发以下代码:
public PartialViewResult OpenConfig(string SelectID)
{
using (DBconnection db = new DBconnection())
{
switch (SelectID)
{
case "---":
return null;
case "1":
var countries = (from x in db.tbl_CountriesSet select x).ToList();
return PartialView("Countries", countries);
case "2":
var supplierstatus = (from x in db.tbl_SupplierStatusSet select x).ToList();
return PartialView("Supplierstatus", supplierstatus);
case "3": .....
}
}
}
这里有趣的地方。假设我打开了“国家/地区”窗口,它正确加载,我可以添加/编辑/删除国家/地区。这些条目使用jQuery在页面上更新,并且同时使用Ajax调用来更新数据库。这两个工作都很好,数据库都更新和页面。我可以继续工作,所有更改都反映在页面和数据库中,重新加载局部视图时会出现问题。
当我在下拉列表中选择Countries值并再次提交时,程序只是跳过上面显示的方法,并显示我第一次请求列表时显示的相同局部视图。 我在方法中设置了一个断点,如果我在触发之前加载了一些我没有加载的东西,而不是我已经请求过的页面。 在Firefox中,这可以工作,并且部分视图会更新(并且会触发断点),但是在Internet Explorer中,我的控制器被完全忽略并且它会一直显示相同的页面(即使我去了一个完全不同的页面然后返回到设置页面。)
有谁能告诉我如何告诉IE显式重新加载包含当前数据库内容的部分视图?
答案 0 :(得分:3)
这是浏览器缓存的工作原理。它会返回缓存的结果。
使用将当前日期值添加到url以允许从Web服务器加载新结果:
$('#container').load("http://mysite/myview/?" + new Date().getTime(), function () { });
答案 1 :(得分:0)
在控制器功能之上,尝试:
[OutputCache(Duration = 0)]