Немного странного это - в форме, у меня есть некоторые поля
<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 - и не имеет значения, какое поле в модели ссылается)
Я недоумеваю, я должен что-то упустить. Как я уже сказал, я могу заставить его работать, но я действительно хочу понять, почему первый элемент управления (и только первый элемент управления) игнорируется?
Я вызываю функцию refreshData при изменении:
$('#Amount').change(function () {
refreshData();
});
Удалите JSON.stringify из вашего кода. Я испытал это раньше, и все параметры запроса будут завернуты кавычками "Amount = x & IncludesVAT = y", поэтому метод запутывается в отношении его параметров. Если вы удалите stringify, он правильно проанализирует данные.