【发布时间】:2014-05-16 13:30:42
【问题描述】:
我在 MVC.net 应用程序中使用定义如下的 Ajax 调用序列化表单时遇到问题:
@using (Html.BeginForm("SpecialNotice", "Displays", FormMethod.Post, new { id = "form" }))
表单定义如下,将被发布到以下控制器:
public ActionResult SpecialNotice(string dType, bool? immediate,SpecialNoticeModel mod)
当我使用 $(formid).submit() 时,一切正常,表单被传递给控制器,并且 SpecialNoticeModel 填充了表单中定义的所有正确信息。
但是我想做的是一个 AJAX 请求,因为我不希望表单在提交时刷新。我正在使用的 Ajax 调用是:
var formdata = $('#form').serialize();
$.post(window.baseUrl + 'Displays/SpecialNotice', { dType: $(displayid).val(), immediate: false, data: formdata }, function () {
var device = $('#DeviceType').val();
var postnow = '@Model.PostNow.ToString()';
window.location.href = window.baseUrl + 'Displays/SpecialNotice?immediate=' + postnow + '&dtype=' + device;
});
我遇到的问题是表单没有像默认提交那样被序列化,mod 的值在传递给控制器时只是空白的默认值。我也尝试过将 ajax 调用中的数据重命名为 mod,但这也不起作用。
有没有办法像$(formid).submit() 那样手动序列化表单?
【问题讨论】:
-
确保所有控件都有一个名称属性。见api.jquery.com/serialize
-
所以表单中的所有元素都应该有一个对应于它们将被序列化到的类的名称?如果是这种情况,为什么 .submit() 在不添加名称的情况下将其序列化到对象中没有问题?
-
我不确定,但是在 jquery api 中指定了同样的东西
标签: jquery ajax asp.net-mvc forms