【问题标题】:How to pass a javascript object to a C# MVC 4 controller如何将 javascript 对象传递给 C# MVC 4 控制器
【发布时间】:2015-03-05 22:20:42
【问题描述】:

在 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 但它仍然无法正常工作。 我的错误在哪里?我找到了一些帖子,但我没有发现我做错了什么。

非常感谢。

【问题讨论】:

标签: javascript c# ajax asp.net-mvc asp.net-mvc-4


【解决方案1】:
  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; }
    }

【讨论】:

  • 您能否发布一个关于问题所在以及您的代码为何有效的简短说明?
  • 我认为 FromBody 属性在这里不合适。 OP 使用的是 MVC 4,而不是 Web API。
  • @DavidL 感谢您指出这一点,由于标题,我认为这是一个 WebAPI 问题。
  • @danludwig 好点。也许OP应该稍微调整一下标题:)。
  • 抱歉标题。我又试了一次,它对我不起作用:s 我的参数仍然为空
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-05
    • 2019-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    相关资源
    最近更新 更多