如何将javascript对象传递给C#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') });
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但它仍然无法正常工作。 我的错误在哪里? 我发现了一些post,但我没有找到我做错了什么。
非常感谢。
- 确保javascript和C#模型之间的属性名称匹配。 在您的问题中,您有javascript对象的
Propr1
和Propr2
,但在C#模型中,您有Prop1
和Prop2
(缺少“r”)。 - 在发送数据之前不要对数据进行
stringify
,也不要将dataType
设置为json
。 MVC可以使用一组post参数进行解析,而不需要在代码中使用json序列化。 - 省略
contentType
,没有必要。 WebAPI应该自动检测这个。 你可以离开它,但这是无关紧要的。 - 确保模型属性是公共的。
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; } }