5


0

私はJQueryの$ .getJSONを使用してControllerからModelデータにアクセスし、ユーザーがリストに項目を追加したり削除したりするときに使用するJSONオブジェクトをJavaScriptで構築しようとしています。 すべてのJSは外部ファイルで行われます。 モデルデータのためのサーバーへのヒットはページが最初にロードされた後に一度だけ行われるので、ユーザーが選択するためのオプションの完全なリストを得ることができます。 その後、ユーザーは必要なだけリストを変更し(そしてJSONオブジェクトはそれに応じて更新されます)、それからそれを保存します(DBに書き戻されます)。

しかし、これが私の問題です。$ .getJSONを使用するとき、私が話している特定のリソースを調べ、その特定のリソースに関連するオプションのリストを取得できるように、Controllerで呼び出す必要があるメソッドはIDが必要です。 しかし、外部のJSファイルから、そのIDを取得してControllerに渡す方法がわかりません。 それは最初にページを開くリンクに組み込まれていてURLの中に座っています、しかしページがロードされると私はそれをコントローラに渡すためにどのようにこのIDを取得するかわかりません。 私はこれが混乱を招くことを知っているので、私は私のコードの一部を以下に貼り付けました。

最初にページをロードするController内のdetailsメソッド(何をロードするのかを知るためにresourceIDを取ります):

public ActionResult Details(string resId){//基本メソッドbase.Details(resId、resourceType)を呼び出します。評価eval =(評価)this.Model; ViewData.Model = eval; View( "Index")を返します。 }

私の外部のJSファイルでは、私はこれをやっている:

$ .getJSON( "/評価/ PopulateJournalOptions /" id、populateJSON);

そしてコントローラーで、私はJSONオブジェクトを構築するために呼び出されるPopulateJournalOptionsと呼ばれる別のメソッドを書きました:

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

base.Details(resId、resourceType);評価eval =(評価)this.Model;

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

Json(jsonResult)を返します。 }

繰り返しますが、私の問題は、ページが読み込まれると、PopulateJournalOptionsに渡す必要があるIDにアクセスできないということです。 PopulateJournalOptionsに何も渡さずに、そこで新しいオブジェクトを作成し、それを `(Evaluation)this.Model`に設定することを試みましたが、this.Modelはnullのように見えます。それはJSから呼び出されます。 だから私はちょっとここで立ち往生しています。 何か案は?

2 Answer


5


あなたは、ページ上の隠しフィールドにIDを入れて、それからあなたのジャバスクリプトにそのフィールドからIDを読ませることを考えましたか?

$ .getJSON( "/評価/ PopulateJournalOptions /" $( '#Id')。attr( 'value')、populateJSON);

それから、あなたの見解では、

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

あなたのモデルはプロパティとして必要な `Id`を持っています


0


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

ViewData ["resouceID"] = resouceID;

これを最初にロードするビューに入れます。

$(document).ready(function(){$。getJSON( "<%= Url.Action(" YourActionName "、" YourControllerName "、new {id = ViewData [" resouceID "]})%>"; populateJSON); ;));