如何将 javascript 对象传递给 C# MVC 4 控制器
Posted
技术标签:
【中文标题】如何将 javascript 对象传递给 C# MVC 4 控制器【英文标题】:How to pass a javascript object to a C# MVC 4 controller 【发布时间】: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 但它仍然无法正常工作。 我的错误在哪里?我找到了一些帖子,但我没有发现我做错了什么。
非常感谢。
【问题讨论】:
[msdn.microsoft.com/en-us/magazine/hh781022.aspx](model binding) 有助于了解基础知识 【参考方案1】:-
确保 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;
【讨论】:
您能否发布一个关于问题所在以及您的代码为何有效的简短说明? 我认为 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;
【讨论】:
以上是关于如何将 javascript 对象传递给 C# MVC 4 控制器的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 HtmlDocument.InvokeScript 将对象作为参数传递给 javascript
将 C# 对象(包含静态对象成员)作为参数传递给 C++/CLI 程序
如何使用asp.net c#将HTML格式的电子邮件正文传递给javascript函数