-1

次のような ajax フォームがあります。

@using (Ajax.BeginForm("Action", "Ctrler", null, new AjaxOptions { UpdateTargetId = "divSendML" }, new { id = "frmSendML" }))
{
    <div id="divSendML">

    @Html.EditorFor(x => x.SomeProperties)
    ...

    <div id="divPreview"></div>

    </div>
}

次に、jquery post を呼び出して、タグ divPreiview のコンテンツを更新します。この ajax フォームのコンテンツを投稿したいと思います。

function PreViewGenerateHtml() {
    var form = $("#frmSendML");
    $.post("/Ctrler/Action",
            form.serializeArray(),
            function (data) {
                $("#divPreview").html(data);
            });
}

[HttpPost]
public ActionResult Action(ActionModel model)
{
}

サーバー側では、マップされたモデルに SomeProperties の値がない理由。

4

1 に答える 1

0

このPreViewGenerateHtmlJavaScript 関数を記述する理由は明らかではありません。jquery 控えめなスクリプトを使用Ajax.BeginFormして含めると、生成されたフォームが自動的に AJAX 化され、送信ボタンをクリックするとサーバーに非同期で送信されます。

一方、フォームを手動で AJAX 化する場合は、Ajax.BeginForm の代わりに通常のフォームを使用し、代わりにメソッドにHtml.BeginForm渡す必要があります。form.serialize()form.serializeArray()$.post

ターゲット コントローラ アクションは、通常の HTML フォームとまったく同じ POST データを受け取ります。したがって、デフォルトのモデル バインダーがモデルをバインドすると予想される場合は、入力フィールド名を正しく指定する必要があります。コレクションへのバインドに想定される形式を示す記事を次に示します。

疑問がある場合は、JavaScript デバッグ ツール (FireBug や Chrome 開発者ツールバーなど) を使用して、要求と共に送信されている正確なデータ ペイロードを調べてください。

于 2012-10-01T12:28:29.497 に答える