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