其他人之前已经问过这个问题,但我无法使用他们的答案。
我正在尝试通过执行以下操作发送一些数据:
function addForumPost() {
var title = jQuery('#forumTitle').val();
var message = htmlEncode(jQuery('#message').htmlarea("toHtmlString"));
var tagNames = addTags();
var dataPost = $.toJSON({ title: 'testingsadf', message: message, tagNames: tagNames });
jQuery.ajax({
type: "POST",
url: "/Create",
data: dataPost,
dataType: "json",
success: function (result) {
}
});
}
我已经检查过,并且检查过输入包含数据,但是我只接收到控制器中message参数的数据。其他两个值为null。正如您在上面的示例中所看到的,我甚至为title参数分配了一些静态文本,但我仍然只接收message参数的数据。
控制器如下所示:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(string title, string message, List<string> tagNames)
{
....
}
答案 0 :(得分:1)
尝试从jQuery 1.4开始设置traditional
参数。这对我有用:
var title = 'title';
var message = 'message';
var tagNames = ['tag1', 'tag2'];
jQuery.ajax({
type: 'POST',
url: '/Home/Create',
data: { title: title, message: message, tagNames: tagNames },
dataType: 'json',
traditional: true,
success: function (result) {
}
});
采取此行动:
[HttpPost]
public ActionResult Create(
string title,
string message,
IEnumerable<string> tagNames
)
{
return Json(new
{
Title = title,
Message = message,
TagNames = tagNames
});
}
答案 1 :(得分:1)
您的错误非常简单。如果您有一个返回JsonResult
的操作,则表示不您必须将JSON编码的输入参数发送到该方法。只需删除$.toJSON()
的使用情况,并将该对象用作data
jQuery.ajax
参数的值(例如,请参阅Darin的答案)。
如果您调用ASMX Web Service而不是ASP.NET MVC操作,则必须使用contentType: "application/json; charset=utf-8"
并将所有Web方法参数的值转换为JSON,但以其他方式(见How do I build a JSON object to send to an AJAX WebService?)。但ASP.NET MVC没有这样的要求。 MVC根据Parse
方法(int.Parse
,DateTime.Parse
等转换您发送的输入参数,而不是从JSON反序列化。因此,如果您搜索代码示例,请查看后端使用的技术:ASP.NET MVC,ASMX Web服务或WFC。
答案 2 :(得分:0)
您不必手动将字段组合到地图中。使用.serializeArray()
var postData = $('。myform')。serializeArray()