J'essaie d'utiliser $ .getJSON de JQuery pour accéder aux données du modèle à partir du contrôleur, et créer un objet JSON dans le javascript à utiliser lorsque l'utilisateur ajoute et supprime des éléments de une liste. Tout JS est fait dans un fichier externe. L'accès au serveur pour les données du modèle est effectué une seule fois après le chargement initial de la page afin que je puisse obtenir la liste complète des options pour l'utilisateur à choisir. Après cela, l'utilisateur peut modifier la liste autant qu'il le souhaite (et l'objet JSON est mis à jour en conséquence), puis l'enregistrer (réécrit dans la base de données). Mais voici mon problème: Lors de l'utilisation de $ .getJSON, la méthode que j'ai besoin d'appeler dans le contrôleur a besoin d'un ID afin qu'il puisse rechercher la ressource dont je parle et récupérer la liste des options qui s'y rapportent à cette ressource particulière. Mais à partir d'un fichier JS externe, je ne sais pas comment faire passer cette identification au contrôleur. Il est construit dans le lien qui ouvre la page en premier lieu, et est assis dans l'URL, mais une fois la page chargée, je ne sais pas comment obtenir cet ID afin de le transmettre au contrôleur. J'ai collé une partie de mon code ci-dessous, parce que je sais que cela est source de confusion:Accès au modèle ASP.NET MVC Données du fichier Javascript externe
méthode Détails dans le contrôleur qui se charge d'abord une page (prend un resourceID pour savoir quoi charger):
public ActionResult Details(string resId)
{
//call base method
base.Details(resId, resourceType);
Evaluation eval = (Evaluation)this.Model;
ViewData.Model = eval;
return View("Index");
}
Dans mon fichier JS externe, je fais ceci:
$.getJSON("/Evaluation/PopulateJournalOptions/" + id, populateJSON);
Et dans le contrôleur, j'ai écrit une autre méthode appelée PopulateJournalOptions qui est appelée à construire l'objet JSON:
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);
}
Encore une fois, mon problème est que, une fois la page chargée, je n'ai pas accès à l'ID que j'ai besoin de passer à PopulateJournalOptions. J'ai essayé de ne rien transmettre à PopulateJournalOptions, et de créer un nouvel objet là-bas et de lui donner la valeur (Evaluation)this.Model
, mais this.Model semble être nul, probablement parce qu'il s'agit d'une nouvelle instance du contrôleur une fois qu'il est appelé depuis le JS. Donc je suis coincé ici. Des idées?
avoir répondu à votre question ci-dessous et je vous suggère de faire un bon livre MVC (d'apress) et lire sur le cycle de vie de la demande. –