2012-04-03 10 views
0

Ich bin neu in Web-Entwicklung und ihre Prinzipien so entschuldigt, wenn meine Frage nicht klar scheint.IE9 und AJAX - Liste nicht erfrischend (ASP.NET und MVC3)

Geschichte bis jetzt ......

Im Open Source-Anwendung zu schreiben ASP.NET MVC3 zu lernen. Jetzt bin ich in der Phase, in der ich meinen CRUD-Controller erstelle, um mir zu erlauben, einige neue Typen zu schaffen. Jetzt habe ich einen SiteAdmin Controller erstellt, der mein Dashboard mit einer View enthält. Die Ansicht enthält Registerkarten. Ich habe gelernt, wie Tabs zu handhaben den folgenden Blog-Post mit und JQuery UI

http://ericdotnet.wordpress.com/2009/03/17/jquery-ui-tabs-and-aspnet-mvc/

habe ich beschlossen, das AJAX Beispiel zu verwenden, um meine Tabs zu behandeln, wobei ich einen Index-Parameter auf eine Controller-Aktion-Methode übergeben aufgerufen AjaxGetTab. Diese Methode (gemäß dem Blogpost) gibt eine Teilansicht für den erforderlichen Typ zurück. Innerhalb der Teilansicht gibt es Erstellen Controller-Aktionsmethoden, z. CreateTransactionType (HttpPost), die neue Datensätze erstellen.

"Stop the geschwätzt, was das Problem ist"

Das Problem ist, dass meine Liste in der Registerkarte auf der Ansicht nicht aktualisiert, nachdem die Create-Methode beendet ist. Dieses Problem existiert nur in IE9 (nur IE habe ich getestet) aber Chrome und Firefox arbeiten, d. H. Die Liste wird aktualisiert.

Ich habe überprüft, die Datenbank Datensätze existiert.

Mein Code ist hier:

JQuery in Dashboard.cshtml:

<script type="text/javascript"> 
    $(document).ready(function() { 
     $("#tabs").tabs(); 
     getContentTab (1); 
    }); 

    function getContentTab(index) { 
     var url='@Url.Content("~/SiteAdmin/AjaxGetTab")/' + index; 
     var targetDiv = "#tabs-" + index; 
     var ajaxLoading = "<img id='ajax-loader' src='@Url.Content("~/Content")/ajax-loader.gif' align='left' height='28' width='28'>"; 

     $(targetDiv).html("<p>" + ajaxLoading + " Loading...</p>"); 

     $.get(url,null, function(result) { 
      $(targetDiv).html(result); 
     }); 
    } 

SiteAdminController AjaxGetTab Methode:

/// <summary> 
    /// AJAX action method to obtain the correct Tab to use. 
    /// </summary> 
    /// <param name="index">Tab number</param> 
    /// <returns>Partial View</returns> 
    public ActionResult AjaxGetTab(int id) 
    { 
     string partialViewName = string.Empty; 
     object model = null; 

     //--Decide which view and model to pass back. 
     switch (id) 
     { 
      case 1: 
       partialViewName = "_TransactionType"; 
       model = db.TransactionTypes.ToList(); 
       break; 
      case 2: 
       partialViewName = "_DirectionType"; 
       model = db.DirectionTypes.ToList(); 
       break; 
      case 3: 
       partialViewName = "_UserType"; 
       model = db.UserTypes.ToList(); 
       break; 
      case 4: 
       partialViewName = "_CurrencyType"; 
       model = db.CurrencyTypes.ToList(); 
       break; 
      case 5: 
       partialViewName = "_tabError"; 
       break; 

     } 

     return PartialView(partialViewName,model); 
    } 
} 

SiteAdminController CreateTransactionType Methode:

 [HttpPost] 
    public ActionResult CreateTransactionType(TransactionType model) 
    { 
     try 
     { 
      // TODO: Add insert logic here 
      if (ModelState.IsValid) 
      { 
       model.id = Guid.NewGuid(); 
       model.RecordStatus = " "; 
       model.CreatedDate = DateTime.Now; 
       db.TransactionTypes.AddObject(model); 
       db.SaveChanges(); 

      } 
      return RedirectToAction("Dashboard"); 
     } 
     catch 
     { 
      return PartialView("_tabError"); 
     } 
    } 

Antwort

1

Ersetzen Sie Ihre

$.get(url,null, function(result) { 
    $(targetDiv).html(result); 
}); 

Von:

$.ajax({ 
    type: 'get', 
    url: url, 
    cache: false, 
    success: function(result) { 
    $(targetDiv).html(result); 
    } 
}); 

Das Problem ist, dass IE AJAX-Anfragen-Caches, so durch Cache-Einstellung: false in den Einstellungen es sollte arbeiten.

+0

Danke Charles für die schnelle Antwort. Ich werde das jetzt einen Wirbel geben und dich in einem mo wissen lassen. – garfbradaz

+1

Hallo Charles - das hat in IE9 funktioniert, also vielen Dank. – garfbradaz