5

送信後に AJAX 経由で for を更新すると、次の問題が発生します。何らかの理由で、返された HTML にある一部の非表示フィールドが更新されていません。これは、デバッガーを実行すると正しい値を持っているように見えるため、奇妙です。

これは私のフォームの関連部分です

<div id="itemPopUpForm">
    @{Html.EnableClientValidation();}
    @Html.ValidationSummary()
    <div id="formDiv">
        @{ Html.RenderPartial("ItemData", Model, new ViewDataDictionary() { { "Machines", ViewBag.Machines }, { "WarehouseList", ViewBag.WarehouseList }, { WebConstants.FORM_ID_KEY, @ViewData[WebConstants.FORM_ID_KEY] } }); }
    </div>
</div>

次に、部分ビューには、更新されていないこれらのような非表示のフィールドが含まれています

@using (Html.BeginForm("Index", "Item", FormMethod.Post, new { id = "frmItem", name = "frmItem" }))
{ 
    @Html.AntiForgeryToken()
    @Html.HiddenFor(model => model.Item.SodID)
    @Html.HiddenFor(model => Model.Item.ItemID) //The itemID needs updating when an item is copied
    @Html.HiddenFor(model => model.Item.Delivery.DeliveryAddressID, new { @id = "delAddressID" }) 

そして、これはフォームを更新するJavaScriptメソッドです

function ajaxSave() {
        if (!itemValid()) return; 
        popup('ajaxSplash');
        $.ajax({
            type: "POST",
            url: '@Url.Action("Index")',
            data: $("#frmItem").serialize(),
            success: function (html) {
                console.log(html);
                $("#formDiv").html(html);
                initItemPage();
                alert("Item was saved successfully");
            },
            error: function () { popup('ajaxSplash'); onFailure(); }
        });
    }

アクション インデックスは部分ビュー「ItemData」を返し、アイテム モデルを確認すると正しい値が返されますが、返された html を見るとまだ 0 に設定されています。

4

2 に答える 2

6

POST アクションでモデル プロパティを変更する場合は、最初に ModelState から削除することを忘れないでください。そうしないと、レンダリング時に HTML ヘルパーが最初に投稿された値を使用します。

[HttpPost]
public ActionResult Index(MyViewModel model)
{
    // remove the value from modelstate
    ModelState.Remove("Item.ItemID");

    // update the value
    model.Item.ItemID = 2;   

    return PartialView(model);
}
于 2012-10-03T09:49:13.383 に答える
0
于 2014-11-18T23:23:26.667 に答える