MVC部分视图模型不刷新

我有一个局部视图,它被加载到asp.net MVC 3中的jQuery模式。问题是视图没有正确刷新。 以下是事件的顺序:

1)主视图有一个列出不同事件记录的表。 表格的每一行都有一个链接来显示事件详细信息。 2)单击此表上的链接时,部分视图将加载到模态中。

这在某些情况下工作正常,在其他情况下,模型将需要很长时间才能加载。 关闭局部视图/模态并单击主视图上表中的另一个链接后,将加载部分视图,显示上一次加载的数据。 它没有正确刷新。

主视图上Modal的定义:载入中,请稍候……

 $(document).ready(function () { $("#EventRegistrantSummary").dialog({ bgiframe: true, autoOpen: false, height: 500, width: 980, resizable: false, modal: true }); }); function showEventRegistrantSummary(id) { $.get("/Event/EventRegistrantSummary/" + id, function (data) { $("#EventRegistrantSummary").html(data); }); $("#EventRegistrantSummary").dialog('open'); return false; }  

控制器:

  public PartialViewResult EventRegistrantSummary(Guid id) { ModelState.Clear(); Event e = db.Events.Single(ev => ev.ID == id); return PartialView(e); } 

部分视图:

 <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>  
Registration Summary:
Overview
Total Registrants:

任何帮助深表感谢。

使用控制器操作上的OutputCacheAttribute禁用缓存。

 [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] public PartialViewResult EventRegistrantSummary(Guid id) { ModelState.Clear(); Event e = db.Events.Single(ev => ev.ID == id); return PartialView(e); } 

听起来像是一个缓存问题。 某些浏览器可以缓存GET请求。 尝试通过设置cache: false或尝试$.post请求,用$.ajax替换$.get AJAX调用:

 $.ajax({ url: '<%= Url.Action("EventRegistrantSummary", "Event") %>', type: 'GET', cache: false, data: { id: id }, success: function(data) { $('#EventRegistrantSummary').html(data); } }); 

此外,您不需要在EventRegistrantSummary操作中清除ModelState,因为您没有修改任何值。

另一种方法是在使用in build MVC helper时将随机数附加到查询字符串。

例如:

 @Ajax.ActionLink("LinkText", "Index", "Home", new { rnd = DateTime.Now.Ticks }, new AjaxOptions { UpdateTargetId = "main", OnSuccess = "pageloadSuccess" }) 

或者表格:

 using (Ajax.BeginForm("EditUpdate", new { rnd = DateTime.Now.Ticks }, new AjaxOptions { UpdateTargetId="Target", InsertionMode= InsertionMode.Replace})) 

并不总是最好的方法,但如果你想避免标记你的每个方法(如果你有很多需要避免缓存问题)或使用jQuery自己处理提交,这是一个快速的解决方法。