Я пытаюсь использовать $ .getJSON JQuery для доступа к данным модели из контроллера и создать объект JSON в javascript для использования при добавлении и удалении элементов из списка. Все JS делается во внешнем файле. Доступ к серверу для данных модели выполняется только один раз после первой загрузки страницы, поэтому я могу получить полный список опций, из которых пользователь может выбирать. После этого пользователь может изменять список по своему усмотрению (и объект JSON соответствующим образом обновляется), а затем сохранять его (записывается обратно в БД).
Но вот моя проблема: при использовании $ .getJSON, метод, который мне нужно вызвать в контроллере, нуждается в идентификаторе, чтобы он мог посмотреть, о каком конкретном ресурсе я говорю, и получить список параметров, которые относятся к этот конкретный ресурс. Но из внешнего файла JS я не знаю, как получить этот идентификатор для передачи в контроллер. Он встроен в ссылку, которая в первую очередь открывает страницу, и находится в URL, но как только страница загружается, я не знаю, как получить этот идентификатор, чтобы передать его контроллеру. Я вставил часть своего кода ниже, потому что я знаю, что это сбивает с толку:
Метод деталей в Controller, который изначально загружает страницу (для определения того, что загружать, требуется идентификатор ресурса):
public ActionResult Details(string resId)
{
//call base method
base.Details(resId, resourceType);
Evaluation eval = (Evaluation)this.Model;
ViewData.Model = eval;
return View("Index");
}
В моем внешнем файле JS я делаю это:
$.getJSON("/Evaluation/PopulateJournalOptions/" + id, populateJSON);
И в Контроллере я написал другой метод, называемый PopulateJournalOptions, который вызывается для создания объекта 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);
}
Опять же, моя проблема в том, что после загрузки страницы у меня нет доступа к идентификатору, который необходимо передать в PopulateJournalOptions. Я попытался просто не передавать ничего в PopulateJournalOptions и создавать там новый объект и устанавливать его равным (Evaluation)this.Model
, но this.Model, по-видимому, имеет значение null, вероятно, потому что это новый экземпляр Controller после его вызова из JS , Так что я застрял здесь. Есть идеи?