2010-07-20 49 views
1

我在使用Ajax.ActionLink的updatetargetid屬性顯示div中的部分視圖時遇到問題。 這是我的控制器 -IE div,updatetargetid在後續請求中不刷新

[HandleError] 
    public class HomeController : Controller 
    { 
     static NumberViewModel model = new NumberViewModel(); 

     public ActionResult Index() 
     { 

      model.IsDivisibleBy3 = (model.CurrentNumber % 3 == 0); 

      if (Request.IsAjaxRequest()) 
      { 
       return PartialView("ViewUserControl1", model); 
      } 

      return View(); 
     } 

     [ActionName("Increment")] 
     public ActionResult Increment() 
     { 
      model.CurrentNumber++; 
      return RedirectToAction("Index"); 
     } 
    } 

我的索引視圖 -

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> 
    Home Page 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
    <script type="text/javascript"> 

     function ShowResult() { 
      var windowWidth = document.documentElement.clientWidth; 
      var windowHeight = document.documentElement.clientHeight; 
      leftVal = (windowWidth - 655)/2; 
      topVal = (windowHeight - 200)/2;  

      $('#result').css({ 
       "left": leftVal, 
       "top": topVal 
      }); 
      $('#background').fadeIn("slow"); 
     } 


    </script> 
    <div id="background" class="hiddenDiv"> 
     <div id="result" class="popupBox"> 
     </div> 
    </div> 
    <%= Ajax.ActionLink("Show", "Index", new AjaxOptions() { UpdateTargetId="result", OnComplete="ShowResult", HttpMethod="Get" })%> 
    <%= Html.ActionLink("Increment","Increment") %> 

</asp:Content> 

這在FF但不是在IE6,IE8。

IE場景- 所以當我點擊'show'時,第一次顯示'0可以被3整除'。 如果點擊「遞增」,數字現在爲1,不能被3整除。 現在,如果點擊'顯示',它會顯示'0可以被3整除'。

在VS中保留調試點後,我發現第二次請求根本沒有去服務器。導致不更新updatetargetid div。

以前有人遇到過這個問題嗎?

+0

可能重複的[asp.net mvc禁用瀏覽器緩存](http://stackoverflow.com/questions/1160105/asp-net-mvc-disable-browser-cache) – 2012-06-29 12:31:03

回答

3

即是緩存dubplicate請求剛剛添加到您的操作方法:

 Response.CacheControl = "no-cache"; 
     Response.Cache.SetETag((Guid.NewGuid()).ToString()); 

所以你必須:

[ActionName("Increment")] 
    public ActionResult Increment() 
    { 
     Response.CacheControl = "no-cache"; 
     Response.Cache.SetETag((Guid.NewGuid()).ToString()); 
     model.CurrentNumber++; 
     return RedirectToAction("Index"); 
    } 
+0

非常好!謝謝KP。 – Morin 2010-07-29 08:52:28