如何将 javascript 对象传递给 C# MVC 4 控制器

How to pass a javascript object to a C# MVC 4 controller

在 MVC4 中,如何将 javascript 对象传递给 AJAX 中的 C# 控制器? 最后我试了这个但是没有用。

Javascript 客户端:

    var myData = {Propr1: '', Propr2: ''};
    $.ajax({
        type: 'POST',
        data: JSON.stringify(myData),
        url: '/Home/SubmitMyData',
        contentType: 'application/json',
        dataType: 'json',
        success: alert('Youhou'),
        error: alert('not good')
    });

C# 服务器端方法:

    public ActionResult SubmitMyData(MyParamModel myParam)
    {
        // Do my stuff here with my parameter
        return View();
    }

    public class MyParamModel
    {
        string Prop1 { get; set; }
        string Prop2 { get; set; }
    }

我的参数总是空的。我试图更改 contentType 但它仍然不起作用。 我的错误在哪里?我找到了一些帖子,但我没有发现我做错了什么。

非常感谢。

  1. 确保 属性 名称在 javascript 和 C# 模型之间匹配。在您的问题中,javascript 对象有 Propr1Propr2,但在 C# 模型中,您有 Prop1Prop2(缺少 "r").
  2. 发送前不要stringify数据,也不要将dataType设置为json。 MVC 可以很好地解析一组 post 参数,而无需在您的代码中进行 json 序列化。
  3. 省略contentType,没有必要。 WebAPI 应该自动检测到这一点。你可以离开它,但它是无关紧要的。
  4. 确保模型属性为 public。

Javascript 客户端:

    var myData = {Prop1: '', Prop2: ''}; // #1
    $.ajax({
        type: 'POST',
        data: myData, // #2
        url: '/Home/SubmitMyData',
        //contentType: 'application/json', #3
        //dataType: 'json', #2
        success: alert('Youhou'),
        error: alert('not good')
    });

C#服务器端方法:

    public ActionResult SubmitMyData(MyParamModel myParam)
    {
        // Do my stuff here with my parameter
        return View();
    }

    public class MyParamModel // #4
    {
        public string Prop1 { get; set; }
        public string Prop2 { get; set; }
    }

您为 data 属性 传递的值应该是一个对象,而不是字符串:

data: myData,

属性 个名称需要匹配:

var myData = { Prop1: '', Prop2: ''};

您需要在参数值上使用 [FromBody] 属性:

public ActionResult SubmitMyData([FromBody] MyParamModel myParam)

并且模型类型的属性需要为 public:

public class MyParamModel
{
    public string Prop1 { get; set; }
    public string Prop2 { get; set; }
}