asp.net MVC serialize() 在控制器的模型中返回空
本文关键字:模型 返回 控制器 MVC net serialize asp | 更新日期: 2023-09-27 18:35:51
我的cshtml
片段:
@model Models.ClockingInformationViewModel
<form id="clocking-form">
<div class="row">
<div class="col-md-4">
<div class="form-group">
<label class="control-label">Time in</label>
<div class="input-group date form_datetime">
@Html.TextBoxFor(m => m.Attendance.Time01In, new { @class = "form-control", @readonly = "readonly", size = "16" })
</div>
</div>
</div>
<div class="col-md-4">
<div class="form-group">
<label class="control-label">Job code</label>
@Html.TextBoxFor(m => m.Attendance.Time01InJob, new { @class = "form-control" })
控制器:
[HttpPost]
public JsonResult ClockingInformation(ClockingInformationViewModel model)
{
return null;
}
视图模型:
public class ClockingInformationViewModel
{
public Attendance Attendance { get; set; }
public List<Clock> ClockingLocations { get; set; }
}
在我的javascript中,我有这个:
function saveClockingInformation() {
var data = $("#clocking-form").serialize();
$.post($("#clocking-info-url").val(), { model: data });
}
当我在控制器中设置断点时,ClockingInformationViewModel model
属性为 null。
当我做serializeArray()
而不是serialize()
时,ClockingInformationViewModel model
不是空的,但属性Attendance
是。
我敢肯定,这是我忽略了一些愚蠢的错误。
有什么见解吗?
您的var data = $("#clocking-form").serialize();
行代码已经将表单序列化为对象,因此代码需要
function saveClockingInformation() {
var data = $("#clocking-form").serialize();
$.post($("#clocking-info-url").val(), data);
}
将表单数据发送为
Attendance.Time01In=someValue&Attendance.Time01InJob=anotherValue
而您当前使用 { model: data }
的实现将表单数据作为
model[Attendance.Time01In]=someValue&model[Attendance.Time01InJob]=anotherValue
与您的模型没有关系,因此绑定失败。
旁注:您使用$("#clocking-info-url").val()
建议您将 URL 放入隐藏的输入中。相反,请使用
var url = '@Url.Action("yourAction", "yourController")',
$.post($(url, data);
或者,如果您使用 Html.BeginForm()
生成了表单,则使用
var form = $("#clocking-form");
var url = form.attr('action');
$.post($(url, data);