我无法使用定义如下的Ajax调用在MVC.net应用程序中序列化表单:
@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()
似乎做的方式手动序列化表单?
答案 0 :(得分:0)
答案 - 问题是在序列化表单后我将它包装在一个导致问题的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;
});