在JQuery中使用AJAX调用序列化并提交表单

时间:2014-05-16 13:30:43

标签: 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)

当我使用$(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()似乎做的方式手动序列化表单?

1 个答案:

答案 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;
    });