小编典典

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

ajax

在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; }
    }

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

非常感谢。


阅读 270

收藏
2020-07-26

共1个答案

小编典典

  1. 确保javascript和C#模型之间的属性名称匹配。在你的问题,你有Propr1Propr2为JavaScript对象,但在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')
    });

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; }
    }
2020-07-26