繁体   English   中英

如何将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; }
    }

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

非常感谢。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM