如何序列化模型,将其传递给 ajax 请求中的 MVC 控制器

Posted

技术标签:

【中文标题】如何序列化模型,将其传递给 ajax 请求中的 MVC 控制器【英文标题】:How to serialize model, pass it to MVC controller in ajax request 【发布时间】:2014-09-16 15:28:52 【问题描述】:

我正在尝试将我的页面模型传递给我的控制器进行处理。 处理完信息后,想更新id为“savedText”的div,显示“账单信息保存成功”。

我有这个想法

function testingFunction() 
    var obj = $('testForm').serialize();

    $.ajax(
        url: '@Url.Action("TestingFunction", "BuildGiftCard")',
        dataType: 'json',
        success: function (result) 
            $("#savedText").html(result);
        ,
        contentType: 'application/json; charset=utf-8',
        data: JSON.stringify(obj)
    );

    return false;

我的控制器中有这个:

[HttpPost]
public JsonResult TestingFunction(PurchaseModel model)

    return Json("Billing information saved successfully.");

我做错了什么?

在 chrome 中“检查元素”时,在网络选项卡中,表示找不到我的控制器方法。

另外,对我来说,将整个模型从视图中获取到控制器的函数(在本例中为 TestingFunction)很重要,这样我就可以获取表单信息并保存它。我正在尝试 .serialize() 函数,但这会导致 obj = (空字符串)。

【问题讨论】:

你应该使用 either serialize()JSON.stringify() 但不能同时使用。由于您使用的是表单,请不要更改 contentType,也不要JSON.stringify()它。 但是当我在 chrome 中输入 serialize() 并调试时,结果是空字符串。如何获取表格信息?我检查了,我的表单 ID 正确。它不会拉回任何东西。 您没有正确使用 jQuery 选择器。请阅读Jason P的回答。 一切正常,只是功能没有受到影响。我从 chrome 网络检查中得到这个:POST localhost/BuildGiftCard/TestingFunction 404 (Not Found) 我实际上是在 ajax 方法的 URL 部分拼错了控制器名称。我改变了它,现在我得到一个不同的错误:异常详细信息:System.ArgumentException:无效的 JSON 原语:GiftCardStep2.SelectedInfoPanel 【参考方案1】:

三件事:

    $('testForm') 应该是 $('.testForm')$('#testForm')。因为您正在尝试选择<testForm></testForm>。 如果您只是发送表单,则不需要是 json。 尝试发出post 请求:

$.ajax(
    url: '@Url.Action("TestingFunction", "BuildGiftCard")',
    dataType: 'json',
    success: function (result) 
        $("#savedText").html(result);
    ,
    data: $('#testForm').serialize(),
    type: 'POST'
);

【讨论】:

您的答案中的第 1 位修复了空表单的问题。所以谢谢。但是它仍然说找不到post方法。 如果您删除[HttpPost] 属性并在浏览器中访问该网址,它会返回404 吗? 我实际上是在 ajax 方法的 URL 部分拼错了控制器名称。我改变了它,现在我得到一个不同的错误:异常详细信息:System.ArgumentException:无效的 JSON 原语:GiftCardStep2.SelectedInfoPanel。 你还在设置json的contentType吗?听起来 jquery 正在发送序列化的表单,但服务器正在尝试反序列化 json。 是的,我正在设置内容类型。不知道为什么它不起作用。它不喜欢我序列化表单的方式。这就是通过序列化表单将模型从 jquery 传递到控制器的方式吗?

以上是关于如何序列化模型,将其传递给 ajax 请求中的 MVC 控制器的主要内容,如果未能解决你的问题,请参考以下文章

如何将 AJAX 请求中的 id 列表传递给 MVC 中的服务器

如何将 JSON 传递给 Django 中的 Ajax 请求?

将c#集合序列化为视图中的jquery数组以通过ajax方法传递给控制器

如何使用 ajax 传递 from.serialize() 和数组值?

如何获取模态中的数据ID,然后将其传递给ajax?

JqueryAjax如何传递JSON数据到controller,其中包括List数据?