无法使用jQuery将表单数据发布到MVC4控制器操作方法

时间:2013-05-07 20:04:48

标签: c# jquery json asp.net-mvc-4

我有一个带有textarea的表单,在尝试发送信息时,我正在使用JSON.stringify,我收到错误。这是代码:

        $.ajax({
            type: "POST",
            dataType: "json",
            data: JSON.stringify({
                reportid: data["reportid"], //Guid
                assessmentId: data["assessmentId"], //Guid
                title: data["title"], //string
                body: data["body"], //string
                section: data["section"], //string
                reportsection: data["reportSection"] //string
            }),
            url: "/Assessments/ModifyAssessmentTemplateText",
            success: function (data) {
                lastModified = data["LastModified"];
                updateLastModified(lastModified);
                alert(data);
            }
        });

我的控制器方法设置如下:

[POST("ModifyAssessmentTemplateText")]
[AjaxOnly]
public JsonResult ModifyAssessmentTemplateText(Guid reportid, Guid assessmentid, string title, string body, string section, string reportSection)
{
//...
}

我收到500服务器错误。

我知道当我尝试测试时,只有一个参数,reportid,并且我的方法接受了一个字符串,它就可以了。但是当我把它设置为Guid时,我得到500错误。有没有办法解析JSON服务器端?

编辑:

注意:当我不使用数据时,我会这样做     url:“/ Assessments / ModifyAssessmentTemplateText?reportid =”+ reportid

它没有问题。

5 个答案:

答案 0 :(得分:1)

您不必调用JSON.stringify,因为您需要参数,因此它应该是键值对,并且您正在尝试POST JSON对象。

您可以创建与JavaScript对象匹配的参数,然后使用JSON.stringify,这样模型绑定器会尝试将其反序列化为对象。

答案 1 :(得分:1)

所以我设法在http://encosia.com/asmx-scriptservice-mistake-invalid-json-primitive/找到答案。基本上,我需要做的是将JSON字符串封装在引号中。这使得字符串成为JSON字符串而不是JavaScript Object文字。

引自网站:

The solution is as simple as two single-quotes:
// RIGHT
$.ajax({
  type: 'POST',
  contentType: 'application/json',
  dataType: 'json',
  url: 'WebService.asmx/Hello',
  data: '{ FirstName: "Dave", LastName: "Ward" }'
});

你发现了差异吗? 现在,data参数不是JavaScript对象文字,而是JSON字符串。 差异很微妙,但有助于理解。因为它是一个字符串, jQuery不会尝试进行任何进一步的转换,     并且JSON字符串将在传递给ASMX ScriptService时不受阻碍。

答案 2 :(得分:1)

我认为到目前为止的答案正在围绕这一点展开。您的数据根本不必是字符串,您尝试过吗?

$.ajax({
    type: "POST",
    dataType: "json",
    data: {
        reportid: data["reportid"], //Guid
        assessmentId: data["assessmentId"], //Guid
        title: data["title"], //string
        body: data["body"], //string
        section: data["section"], //string
        reportsection: data["reportSection"] //string
    },
    url: "/Assessments/ModifyAssessmentTemplateText",
    success: function (data) {
        lastModified = data["LastModified"];
        updateLastModified(lastModified);
        alert(data);
    }
});

答案 3 :(得分:0)

您是否尝试将guid作为字符串发布并解析出服务器上的Guid?

答案 4 :(得分:0)

如果您尝试将数据发送为json。你应该知道:

Specifying the Data Type for AJAX Requests

json - 将响应评估为JSON,并将JavaScript对象发送给成功回调。

但是,粘合剂如何检测到json 请求

contentType: 'application/json; charset=utf-8'

相关问题