Zugriff auf ASP.NET MVC-Modell Daten aus externen Javascript-Datei

Ich versuche zu verwenden die JQuery $.getJSON zu Modell für den Zugriff auf Daten aus dem Controller und dem Aufbau eines JSON-Objekts in javascript zu verwenden, da der Benutzer fügt hinzu oder entfernt Elemente aus einer Liste. Alle JS ist in einer externen Datei. Der Treffer auf dem server für die Modell-Daten werden nur einmal ausgeführt, nachdem die Seite das erste mal geladen wird, damit ich eine vollständige Liste der Optionen für den Benutzer zur Auswahl. Danach kann der Benutzer ändern Sie die Liste, so viel er will (und das JSON-Objekt entsprechend aktualisiert), und dann speichern Sie es ab (ruft zurück in die Datenbank geschrieben).

Aber hier ist mein problem: Bei der Verwendung von $.getJSON, die Methode muss ich anrufen in das Steuergerät benötigt eine ID, so dass Sie nachschlagen können, was insbesondere die Ressource, die ich spreche, und erhalten wieder die Liste der Optionen, die sich auf diese bestimmte Ressource. Aber aus einer externen JS-Datei, ich weiß nicht, wie zu bekommen, dass die ID übergeben an den Controller. Es ist gebaut in der link öffnet die Seite in den ersten Platz, und sitzt in der URL, aber sobald die Seite geladen wird, weiß ich nicht, wie man diese ID, um es weiterleiten an den Controller. Habe ich eingefügt, einige meiner code unten, weil ich weiß, das ist verwirrend:

Details-Methode im Controller, der zunächst lädt eine Seite (dauert ein resourceID zu wissen, was zu laden):

public ActionResult Details(string resId)
{
    //call base method
    base.Details(resId, resourceType);
    Evaluation eval = (Evaluation)this.Model;
    ViewData.Model = eval;
    return View("Index");
}

In meine externe JS-Datei, ich bin dabei:

$.getJSON("/Evaluation/PopulateJournalOptions/" + id, populateJSON);

Und in die Steuerung, ich schrieb eine weitere Methode namens PopulateJournalOptions, die aufgerufen wird, zu bauen das JSON-Objekt:

public JsonResult PopulateJournalOptions(string resId)
{
   JournalOptionsResult jsonResult = new JournalOptionsResult();

   base.Details(resId, resourceType);
   Evaluation eval = (Evaluation)this.Model;

   jsonResult.Activities = eval.Journal.Activities;
   jsonResult.Issues = eval.Journal.Issues;
   jsonResult.ScheduledActions = eval.Journal.ScheduledActions;

   return Json(jsonResult);
}

Wieder, mein problem ist, dass, sobald die Seite geladen, ich habe keinen Zugriff auf die ID, die ich brauchen, um passieren zu PopulateJournalOptions. Ich habe versucht, einfach nicht Vorbeigehen etwas zu PopulateJournalOptions, und erstellen ein neues Objekt und setzen es gleich (Evaluation)this.Model, aber das.Modell zu sein scheint null, wahrscheinlich, weil es eine neue Instanz des Controllers, wenn es einmal aufgerufen, aus dem JS. So bin ich irgendwie hier hängengeblieben. Irgendwelche Ideen?

  • Ich habe Ihre Frage beantwortet unten, und ich schlage vor, Sie bekommen eine gute MVC-Buch (von Apress) und Lesen Sie über die request-Lebenszyklus.
InformationsquelleAutor MegaMatt | 2009-11-14
Schreibe einen Kommentar