JQueryの$.getJSONを使用してコントローラーからモデルデータにアクセスし、ユーザーがリストにアイテムを追加および削除するときに使用するJSONオブジェクトをJavaScriptで構築しようとしています。すべてのJSは外部ファイルで行われます。モデルデータのサーバーへのヒットは、ページが最初に読み込まれた後に1回だけ実行されるため、ユーザーが選択できるオプションの完全なリストを取得できます。その後、ユーザーはリストを必要なだけ変更し(それに応じて、JSONオブジェクトが更新され)、保存します(DBに書き戻されます)。
しかし、ここに私の問題があります。$。getJSONを使用する場合、コントローラーで呼び出す必要のあるメソッドにはIDが必要です。これにより、話している特定のリソースを検索し、その特定のリソースに関連するオプションのリストを取得できます。 。しかし、外部のJSファイルから、そのIDを取得してコントローラーに渡す方法がわかりません。これは、最初にページを開くリンクに組み込まれており、URLに含まれていますが、ページが読み込まれると、コントローラーに渡すためにこのIDを取得する方法がわかりません。これが混乱していることがわかっているので、以下にコードの一部を貼り付けました。
最初にページをロードするControllerのDetailsメソッド(何をロードするかを知るためにresourceIDを取得します):
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);
そして、コントローラーで、JSONオブジェクトを構築するために呼び出されるPopulateJournalOptionsと呼ばれる別のメソッドを作成しました。
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に渡す必要のあるIDにアクセスできないことです。PopulateJournalOptionsに何も渡さず、そこで新しいオブジェクトを作成して、に等しく設定しようとしました(Evaluation)this.Model
が、this.Modelはnullのように見えます。これは、JSから呼び出された後のControllerの新しいインスタンスであるためと考えられます。だから私はここで立ち往生しています。何か案は?