5

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の新しいインスタンスであるためと考えられます。だから私はここで立ち往生しています。何か案は?

4

2 に答える 2

5

IDをページの非表示フィールドに入れて、JavaScriptにフィールドからIDを読み取らせることを考えましたか?

$.getJSON("/Evaluation/PopulateJournalOptions/" + $('#Id').attr('value'), populateJSON);

次に、あなたの見解では、

<%= Html.Hidden("Id") %>

あなたのモデルがIdプロパティとして必要なものを持っていると

于 2009-11-14T23:40:01.270 に答える
0

これをコントローラーに入れます。

ViewData["resouceID"] = resouceID;

これを最初にロードするビューに配置します。

<script>
$(document).ready(function() {
    $.getJSON("<%=Url.Action("YourActionName", "YourControllerName", new {id = ViewData["resouceID"]}) %>", populateJSON);
});
</script>
于 2009-11-14T21:34:33.247 に答える