有点奇怪 - 在表格中,我有一些字段
<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();
});
答案 0 :(得分:1)
从代码中删除JSON.stringify。我之前遇到过这种情况,所有请求参数都将用引号“Amount = x&amp; IncludesVAT = y”包装,因此,该方法对其参数感到困惑。如果删除stringify,它将正确解析数据。