0

フォームを最初に投稿するときに ajax と更新を使用するが、2 回目は完全な投稿を行い、ページを部分的なビューに置き換えるという問題が発生します。私は目立たないスクリプトで持っていることと置き換えたことを確認しました...それでも同じ問題がありますUnobtrusiveJavaScriptEnabled = trueliveon

更新: ModelState が有効でない場合にのみ発生します。

これは私が答えを見つけるために来た終わりですが、まだ修正して いません: Ajax.BeginForm は正しく動作しません

あなたがこれを照らすことができるどんな光も高く評価されます.

これは私のメイン ビュー (テスター) です。

@{
ViewBag.Title = "testView";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>
    My TestView</h2>
    @{Html.RenderPartial("_Form", new Project.Models.TestModel());}
<div>
    @Html.ActionLink("Back to List", "Index")
</div>

これは私の部分ビュー フォーム (_Form) です。

@model Project.Models.TestModel
<div class="updatable">
<form method="post" action="@Url.Action("TestProjUpdate")" data-site-ajax="true" data-site-target=".updatable">
<fieldset>
    <div class="editor-label">
        @Html.LabelFor(model => model.TextField)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.TextField)
        @Html.ValidationMessageFor(model => model.TextField)
    </div>

    <p>
        <input type="submit" value="Create" />
    </p>
</fieldset>
</form>
</div>

これは私のコントローラーです:

public ActionResult Tester()
{
    return View();
}

[HttpPost]
public PartialViewResult TesterProjUpdate(TestModel model)
{

    if (!ModelState.IsValid)
        return PartialView("_Form", model);

    TestProj.Vehicle vehicle = new TestProj.Vehicle();

    if (Request.IsAjaxRequest())
    {
        return PartialView("_Vehicle", vehicle);
    }

    return PartialView("_Form", model);

}

そして最後に私のjQuery ajax呼び出し:

$(function () {

var ajaxFormSubmit = function () {
    var $form = $(this);

    var options = {
        url: $form.attr("action"),
        type: $form.attr("method"),
        data: $form.serialize(),
    };

    $.ajax(options).done(function (data) {
        var $target = $($form.attr("data-site-target"));
        $target.replaceWith(data);
    });

    return false;
};

$("form[data-site-ajax='true']").submit(ajaxFormSubmit);

});

あなたが私に与えることができるどんな助けも素晴らしいものになるでしょう!

4

1 に答える 1

1

変更してみてください

$("form[data-site-ajax='true']").submit(ajaxFormSubmit);

$("form[data-site-ajax='true']").one('submit', ajaxFormSubmit);

次に、 $target.replaceWith(data); の後 追加

$("form[data-site-ajax='true']").one('submit', ajaxFormSubmit);
于 2013-05-24T20:07:13.127 に答える