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

Rég*_*IOX 11 javascript c# ajax asp.net-mvc asp.net-mvc-4

在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')
    });
Run Code Online (Sandbox Code Playgroud)

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; }
    }
Run Code Online (Sandbox Code Playgroud)

我的参数始终为null.我试图更改contentType但它仍然无法正常工作.我的错误在哪里?我发现了一些帖子,但我没有找到我做错了什么.

非常感谢.

dan*_*wig 24

  1. 确保javascript和C#模型之间的属性名称匹配.在你的问题中你有Propr1Propr2javascript对象,但在C#模型中你有Prop1Prop2(缺少"r").
  2. 不要stringify发送之前的数据,并且不设置dataTypejson.MVC可以使用一组post参数解析,而不需要在代码中使用json序列化.
  3. 省略contentType,没有必要.WebAPI应该自动检测这个.你可以离开它,但这是无关紧要的.
  4. 确保模型属性是公共的.

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')
    });
Run Code Online (Sandbox Code Playgroud)

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; }
    }
Run Code Online (Sandbox Code Playgroud)

  • 对不起,标题.我再次尝试,它不适合我:s我的参数仍为空 (2认同)