在JQuery中使用AJAX调用序列化和提交表单
我在使用定义如下的Ajax调用序列化MVC.net应用程序中的表单时遇到问题:在JQuery中使用AJAX调用序列化和提交表单,jquery,ajax,asp.net-mvc,forms,Jquery,Ajax,Asp.net Mvc,Forms,我在使用定义如下的Ajax调用序列化MVC.net应用程序中的表单时遇到问题: @using (Html.BeginForm("SpecialNotice", "Displays", FormMethod.Post, new { id = "form" })) 该表单定义如下,并将发布到以下控制器: public ActionResult SpecialNotice(string dType, bool? immediate,SpecialNoticeModel mod) 当我使用$(for
@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
的值只是空白的默认值。我还尝试在对mod的ajax调用中重命名数据,但这也不起作用
有没有一种方法可以像$(formid).submit()
那样手动序列化表单?答案-问题是在序列化表单之后,我将表单包装在一个json对象中,这导致了问题。相反,我这样做了,效果很好:
$.post(window.baseUrl + 'Displays/SpecialNotice', formdata, function () {
var device = $('#DeviceType').val();
var postnow = '@Model.PostNow.ToString()';
window.location.href = window.baseUrl + 'Displays/SpecialNotice?immediate=' + postnow + '&dtype=' + device;
});
确保所有控件都具有名称属性。看到了吗?所以表单中的所有元素都应该有一个与它们将被序列化到的类相对应的名称?如果是这样的话,为什么在没有添加名称的情况下,将.submit()序列化到对象中没有问题?我不确定,但在jquery api中指定了相同的内容