第一个@Html.TextBoxFor 字段在执行 ajax 发布时不会更新模型



这有点奇怪 - 在一个表单中,我有一些字段

 <div class="container">
              @*  <div class="row">
                    <div class="col-md-12" >@Html.HiddenFor(m => m.Reference)</div>
                </div>*@

                <div class="row">
                    <div  class="col-md-1" >@Html.Label("Amount:")</div>
                    <div class="col-md-2" >@Html.TextBoxFor(m => m.Amount)</div>
                    <div class="col-md-2" >@Html.Label("Includes VAT:")</div>
                    <div class="col-md-7" >@Html.CheckBoxFor(m => m.IncludesVAT) </div>
                </div>
            </div>

我使用以下方法将数据发布到控制器:

function refreshData() {
    $.ajax({
        url: '@Url.Action("UpdateDebitModel", "Home")',
        type: 'post',
        data: JSON.stringify($("#DebitForm").serialize())
    });
}

这一切都有效,但第一个 @Html.TextBoxFor 或 CheckBoxFor 永远不会将其值传递给控制器(例如,在这种情况下是金额,但如果我切换上面的顺序,因此复选框是第一个控件,那么复选框值总是被忽略)。

我可以通过拥有一个隐藏字段来绕过它 - 即如果我取消注释上面的隐藏字段,一切正常。(它不必是隐藏的,它可以是 TextBoxFor - 引用模型中的哪个字段并不重要)

我很困惑,我一定在这里错过了什么。 正如我所说,我可以让它工作,但我真的很想了解为什么第一个控件(并且只有第一个控件)被忽略?

我正在更改时调用刷新数据函数:

$('#Amount').change(function () {
        refreshData();
    });

从代码中删除 JSON.stringify。 我以前经历过这种情况,所有请求参数都将用引号"Amount=x&IncludeVAT=y"括起来,因此,该方法对其参数感到困惑。如果删除字符串化,它将正确解析数据。

最新更新