我的网站有一个横幅,可以在紧急/特殊情况下向访问者显示消息。横幅显示基于对数据库表的调用,该表根据DateTime.Now对象检查开始/结束时间。
static private PublicWebEntities db = new PublicWebEntities();
public IEnumerable<AlertMsg> CurrentAlert()
{
var alerts = from q in db.AlertMsgs where (q.Start < DateTime.Now && q.Finish > DateTime.Now) select q;
return alerts;
}
并在页面中显示
@if (Model.CurrentAlert().Any()){
<div class="alert-block">
<a href="" class="button-close">X</a>
@foreach (var item in Model.CurrentAlert()) {
<p>
@Html.Raw(item.Message)
</p> }
</div>}
如果我更改记录中的开始或结束时间,横幅将关闭。但是,当更新记录的文本消息时,显示是旧消息的缓存副本。
我在这个网站上使用EF 4.1和MVC3。
答案 0 :(得分:1)
由于服务器正在缓存页面,因此您可以使用OutputCache
属性来控制保留多长时间来存储页面。
使用以下命令将“关闭”缓存:
[OutputCache(Location = OutputCacheLocation.None, NoStore = false, Duration = 0)]
public ActionResult Index(){
//Your code
}
这应该禁用您正在调用的操作来填充缓存中的结果。
让控制器控制上下文生命周期的一个例子
/// <summary>
/// Provides a base implementation for controllers using a single, simple common context
/// </summary>
public class BaseController : Controller
{
public MyDbContext Db { get; set; }
public BaseController()
{
Db = new MyDbContext();
}
/// <summary>
/// Manages saving the changes back to the database. This should be performed per action and you shouldn't have to manage it
/// </summary>
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
if (Db.ChangeTracker.HasChanges()) Db.SaveChanges();
base.OnActionExecuted(filterContext);
}
/// <summary>
/// Release the resources the context uses and close connections if needed
/// </summary>
protected override void Dispose(bool disposing)
{
if(Db != null) Db.Dispose();
base.Dispose(disposing);
}
}