2009-05-06 1 views
1

Hey alle. Okay, hier ist die Situation. Ich möchte in der Lage sein, eine Reihe ähnlicher Teilansichten auf eine übergeordnete Seite zu laden; ähnlich wie in Artikel this Artikel (Simulation AJAX-Panels).Richtige Möglichkeit zum Laden von partiellen ASP.NET MVC-Ansichten mit AJAX?

In dem Artikel scheint es zu funktionieren, da es die entsprechende Aktionsmethode asynchron auf dem Controller aufruft. Aber die Methode, die er benutzt, sieht bestenfalls wie ein Hack aus und scheint nicht sehr elegant zu sein. Ein kurzer Überblick darüber, was passiert ist:

Dies wäre ein unabhängiges Widget, das asynchron lädt.

<% using (Ajax.Form("ReportOne", null, 
     new AjaxOptions { UpdateTargetId = "resultOne" }, 
     new { id="reportFormOne" })) { } %> 

<script type="text/javascript"> 
    $get("reportFormOne").onsubmit(); 
</script> 

Die entsprechende Ausgabe des Formulars würde:

<form action="/Home/ReportOne/reportFormOne" onsubmit="Sys.Mvc.AsyncForm.handleSubmit(this, { insertionMode: 0, updateTargetId: 'resultDiv' }); return false;"> 

    <!-- Your form elements here... --> 

</form> 

Wie ich bereits erwähnt hatte, dies scheint nicht wie eine wirklich elegante Art und Weise zu Erreichung dieses Ziel zu gehen, aber ich habe habe versucht, eine Alternative dafür zu finden (mit jQuery oder anderen Mitteln), und war dabei nicht erfolgreich.

Antwort

2

jQuery-Lösung: lädt den HTML-Code aus der Aktion, nachdem das Laden der Seite abgeschlossen ist.

<script type='text/javascript'> 
$(function() { 
    $.load('<%= Url.Action("ReportOne", "Home", new { id = "reportFormOne" }) %>', null, function(response,status,xhr) { 
     $('#partialView').html(reponse); 
    }); 
}); 
</script> 

... 

<div id='partialView'> 
</div> 
+0

Vielen Dank. Das würde großartig funktionieren; Wenn es jedoch erforderlich ist, mehrere Teilansichten mit ähnlichen Daten hinzuzufügen, ist es sinnvoll, jQuery zu verwenden, um die IDs der einzelnen Widgets aus der zu ladenden Datenbank abzurufen und dann die einzelnen Aufrufe der Aktion durchzulaufen? Dies scheint eine Menge auf jQuery angewiesen zu sein. – blparker

+0

Sie können all dies in ViewData (oder Ihrem Modell) generieren und dann dynamisch den jQuery-Code erstellen, um genau die benötigten Elemente zu erhalten. Dies würde den erforderlichen clientseitigen Code vereinfachen. – tvanfosson

Verwandte Themen