这有点奇怪 - 在一个表单中,我有一些字段
<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"括起来,因此,该方法对其参数感到困惑。如果删除字符串化,它将正确解析数据。