0

MVC コントローラー メソッドを呼び出して、オブジェクトを渡していEntityます。他のプロパティの中でEntityも、Contactsプロパティがあります。このアプローチでは、コントローラーはエンティティと、エンティティ内の適切な数の連絡先を取得しますが、連絡先のプロパティはすべて null です。

これは元のアプローチです。

$.post('/Home/Save', $.param(entity), SaveComplete);

厳密に型指定されたコントローラーの場合:

public ActionResult Save(Entity entity)

これにより、それぞれEntity.Contactに null プロパティが含まれます。

ここに画像の説明を入力

Fiddler は、連絡先がサーバーに渡されることを示しています。

エンティティの Contacts プロパティをコントローラーに認識させるには、次のようにする必要があります。

JavaScript:

$.post('/Home/Save', { entityAsJson: JSON.stringify(entity) }, SaveComplete);

コントローラーの方法:

public ActionResult Save(string entityAsJson)
{
    try
    {        
        Entity entity = JsonConvert.DeserializeObject<Entity>(entityAsJson);
        // more code here
    }
}

残念なことに、私のコントローラーは厳密に型指定されたエンティティではなく文字列を受け取るようになりました。最初のオプションを機能させる方法はありますか、または JSON を文字列化する必要がありますか?

4

2 に答える 2

4

コントローラー アクションで厳密に型指定されたパラメーターを使用し、正しくバインドされる ajax を使用してデータを送信するには (コレクション プロパティを含む)、次のことを行う必要があります。

  • オプションの設定が許可されていないため、$.ajax代わりに を使用します$.post$.postcontentType
  • JSON を送信する必要があります。だからあなたはJSON.stringfyあなたのデータに必要です
  • これは ASP.NET MVC に JSON の正しいモデル バインダーを使用するように指示するcontentTypeためです。"application/json"

したがって、次のコードは元のコントローラー アクションで動作するはずです。

$.ajax({ 
    url: '/Home/Save', 
    type: 'POST', 
    data: JSON.stringify(entity), 
    contentType: "application/json",
    success: SaveComplete 
});
于 2013-03-02T20:31:17.677 に答える
0

あなたの場合、なぜあなたはjavascriptの投稿をしているのか分かりません。強い型結合の場合は、次のようにします。

(1)コントロールをラップし、ブロック(フォーム)を使用してボタンを送信します。
(2)パラメータとしてクラス名を持つ必要があるアクションを呼び出します。

例えば:

    パブリックアクションの結果(YourClassNameモデル)
    {{
          サンプルコード
    }

モデルでは、あなたはあなたがあなたの見解に記入したものを何でも手に入れるでしょう...

于 2013-03-02T20:39:25.463 に答える