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

本文关键字:MVC 控制器 JavaScript 对象 | 更新日期: 2023-09-27 18:36:50

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

我的参数始终为空。我试图更改内容类型,但它仍然不起作用。我的错误在哪里?我找到了一些帖子,但我没有发现我做错了什么。

多谢。

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

  1. 确保 JavaScript 和 C# 模型之间的属性名称匹配。在你的问题中,你有 javascript 对象的Propr1Propr2,但在 C# 模型中你有Prop1Prop2(缺少"r")。
  2. 发送前不要stringify数据,也不要将dataType设置为 json 。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; }
    }

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