0

次のシナリオがあります。次のコードを使用して ajax を使用して送信しています。

$("#cmdAjaxSave").click(function (evt) {
            evt.preventDefault();
            var $form = $('#frmItem');
            if ($form.valid()) {
                ajaxSave();
            }
        });

function ajaxSave() {
        if (!onBeforeSubmit()) return; //item is not valid, so the ajax call should not be executed
        //var token = $('[name=__RequestVerificationToken]').val();
        popup('ajaxSplash');
        $.ajax({
            type: "POST",
            url: '@Url.Action("Index")',
            data: $("#frmItem").serialize(),
            success: function (html) {
                //console.log(html);                
                $("#formDiv").empty();
                $("#formDiv").append(html);
                initItemPage();
                alert("Item was saved successfully");
            },
            error: function () { popup('ajaxSplash'); onFailure(); }
        });
    }

ここで私が見ている問題は、クライアント側に到着したときに「frmItem」が「true」を返しているにもかかわらず、ModelState が無効であることです。具体的には、実際には正しい値を持つ 3 つのプロパティです。

これを最初にコーディングした開発者によって作成されたコードを掘り下げると、たとえば次のプロパティが見つかりました。

@Html.TextBoxFor(model => model.Item.Service.CPC_BW, htmlAttributes: new { @class = "Text", @onkeyup = "validItem();", @id = "SrvCPCBlk" })

実際には次のように定義されています。

private double _CPC_BW;

[Required]
        [Range(0, 100000, ErrorMessage = "CPC value required")]
        public string CPC_BW { get { return String.Format("{0:F}", _CPC_BW); } set { _CPC_BW = Convert.ToDouble(value); } }

TextBoxFor は数値をフォーマットする明白な方法を提供していないため、彼がそれを行ったと思います.

フォームの Html は次のようにレンダリングされます

<div id="itemPopUpForm">
    @{Html.EnableClientValidation();}    
    <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>

部分ビューには、ajax リクエストで送信されたフォームが含まれています。

4

1 に答える 1

0

モデルの状態をクリアしてから、有効かどうかをテストする必要があると思います...

その一般的な問題。

ModelState.Clear();
ModelState.IsValid();
于 2012-10-04T09:29:03.323 に答える