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

时间:2014-01-04 17:17:10

标签: html asp.net-mvc json jquery

有点奇怪 - 在表格中,我有一些字段

 <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永远不会将其值传递给控制器​​(例如,在这种情况下是Amount,但是如果我切换上面的顺序,那么复选框是第一个控件,那么复选框值总是被忽略)。

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

我很困惑,我必须在这里遗漏一些东西。正如我所说,我可以使它工作,但我真的想了解为什么忽略第一个控件(只有第一个控件)?

我在更改时调用了refreshData函数:

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

1 个答案:

答案 0 :(得分:1)

从代码中删除JSON.stringify。我之前遇到过这种情况,所有请求参数都将用引号“Amount = x&amp; IncludesVAT = y”包装,因此,该方法对其参数感到困惑。如果删除stringify,它将正确解析数据。