如何将 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# 模型之间的属性名称匹配。在你的问题中,你有 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; }
}