3 Stimmen

Wie kann ich eine ASP.NET MVC ViewData über jQuery Ajax aktualisieren?

Ich habe eine Seite, die stark von einer IList (in ActionResult "MyEvents"), die ich in ViewData übergeben abhängt. Etwas wie das: ViewData["events"] = listOfEvents; und am Ende habe ich einfach return View();

Und in meiner Ansicht nehme ich diese ViewData["events"] und führe ein foreach darin aus, damit ich den Inhalt durchlaufen kann.

Allerdings müssen diese ViewData dynamisch gefüllt werden. Wenn ich also auf einen Tag klicke (ich verwende jQuery DatePicker), wird dieser Tag als Argument an "MyEvents" gesendet und dieser Tag wird sehr wichtig für meine listOfEvents sein, die meine ViewData["events"] füllen wird.

Aber das Ergebnis, das ich erhalte, ist, dass die div, die meine foreach enthält eine andere ganze Seite darin erstellt!!! Ich habe versucht, zu tun $("#myDiv").html(contentFromMyEvents) Und das ist passiert.

Zu Testzwecken habe ich auch versucht, Folgendes zu tun $("#myDiv").text(contentFromMyEvents) und der gesamte HTML-Code mit all seinen Tags und alles andere von meiner Seite erschien innerhalb des div! Es war eine Seite innerhalb einer Seite!!

Ich glaube, das passiert, weil ich zurückkehre. return View(); " und natürlich wird es meine ganze Ansicht wiedergeben.

Also, wie kann ich nur die ViewData["events"] übergeben und es auf meiner Seite aktualisieren?

Danke!

3voto

Josh Bush Punkte 2698

Schauen Sie sich die Load-Funktion in jQuery( http://docs.jquery.com/Ajax/load ). Rufen Sie Ihren Controller mit load auf und injizieren Sie dann das Ergebnis in Ihr html-Dokument.

$("myDiv").load("/Controller/Action");

Ihre ViewData werden auf der Serverseite geparst. Anstatt View() zurückzugeben, geben Sie eine PartialView() zurück, die auf ein Benutzersteuerelement zeigt. Was dann herauskommt, ist nur ein HTML-Fragment.

1voto

bendewey Punkte 38830

Sie könnten partielles Rendering verwenden, oder Sie könnten Jquery das Element aus dem Rückgabewert auswählen lassen.

$("#myDiv").empty().append($(contentFromMyEvents).find('#myDiv'));

Denken Sie auch daran, dass Sie, wenn Sie Datumsauswahlen oder Links haben, die Ereignisse innerhalb dieses Bereichs erfordern, diese möglicherweise neu binden müssen.

1voto

Kelly Punkte 187

Sie sollten die Weitergabe von Daten hin und her als JSON .

Dann verwenden Sie jQuery/Javascript, um die Daten nach Belieben zu bearbeiten und zu formatieren.

Denken Sie daran, dass der Browser des Kunden keine Ahnung hat, was ViewData ist, sobald die Seite auf dem Client ist.

Bearbeiten: Aktionscode:

public ActionResult AjaxGetEvents(int id)
{
    IList<object> events = new List<object>();
    foreach( Event event in SomeMethodToGetEvents(id) )
    {
       events.Add( new { Property1 = event.Property1, Property2 = event.Property2 } );
    }
    return JSON(events);
}

Client-seitiger Code:

var url = "some url that returns JSON";
jQuery.getJSON( url, function(data){
    jQuery.each( data ){
        jQuery("#someDiv").append( data.Property1 + " " + data.Property2 "<br/>" );
    });
 });

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X