1

私の MVC ビュー モデルでは、フォーム内にテーブルがあります。

JavaScript から、次のようにコントローラーを呼び出しています。

$.ajax(
    {
        type: "POST",
        url: "@Url.Action("ReorderClues", "Clues", Model)",
        data: JSON.stringify(positions),
        contentType:'application/json'
    });

そして、私のコントローラーの署名は次のとおりです。

public ActionResult ReorderClues(TreasureHuntDetails treasureHuntDetails, int[] ids)

私が見つけたのは、javascript がこの方法でコントローラーを呼び出すと、データ モデル (TreasureHuntDetails オブジェクト) には、treasureHuntId のみが入力され、それ以外はすべて null であるということです。2 番目のパラメーターである ids 配列が正常に入力されます。これは、ajax 関数で JSON.stringify() を使用するパラメーターです。

私は、treasureHuntId を除いて、他のすべてが null である理由を理解できません。フォームには、次のように、オブジェクトのすべてのプロパティに対して HiddenFor 行があります。

        @Html.HiddenFor(m => m.CompletionMessage)
        @Html.HiddenFor(m => m.Description)
        @Html.HiddenFor(m => m.Clues)
        @Html.HiddenFor(m => m.Leaderboard)
        @Html.HiddenFor(m => m.TreasureHuntId)
        etc.

TreasureHuntId 変数の特別な点はわかりません。コントローラーに到達するオブジェクトに値が取り込まれた唯一の変数であるということです。何か案は?私は何が間違っているのでしょうか?

データ モデル (TreasureHuntDetails) だけを使用して通常の方法でコントローラーを呼び出すと、すべてが適切に入力されるため、Ids 配列にも追加するのは JavaScript だけです (JavaScript コード スニペットの「positions」変数は整数配列)。

4

3 に答える 3

2

実際にモデルを戻しているわけではありません。ID がそこにある理由は、おそらく HttpGet 要求の URL に既にあったためです。

まず、モデルが含まれないように URL を変更します。

url: "@Url.Action("ReorderClues", "Clues")",

次に、モデルも返すように ajax メソッドを変更します。

data: { treasureHuntDetails: $("form").serialize(), ids: JSON.stringify(positions) }
于 2013-04-24T22:30:37.177 に答える
0

今年の初めに、jQuery 変数名が actionresult パラメーター名と同じではないという状況がありました。理由は聞かないでください。それが私にとっての問題でした。

于 2013-04-25T07:53:45.843 に答える