Asp.net mvc 2 在AJAX调用中发送参数

Asp.net mvc 2 在AJAX调用中发送参数,asp.net-mvc-2,jquery,Asp.net Mvc 2,Jquery,其他人以前也问过这个问题,但我无法使用他们的答案 我正在尝试通过执行以下操作发送一些数据: function addForumPost() { var title = jQuery('#forumTitle').val(); var message = htmlEncode(jQuery('#message').htmlarea("toHtmlString")); var tagNames = addTags();

其他人以前也问过这个问题,但我无法使用他们的答案

我正在尝试通过执行以下操作发送一些数据:

 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参数接收数据。其他两个值为空。正如您在上面的示例中所看到的,我甚至为title参数指定了一些静态文本,但我仍然只接收message参数的数据

控制器如下所示:

  [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Create(string title, string message, List<string> tagNames)
        {
          ....
        }
[AcceptVerbs(HttpVerbs.Post)]
公共操作结果创建(字符串标题、字符串消息、列表标记名)
{
....
}
尝试从jQuery 1.4开始设置参数。这对我很有用:

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
    });
}
[HttpPost]
公共行动结果创建(
字符串标题,
字符串消息,
IEnumerable标记名
)
{
返回Json(新的
{
头衔,
消息=消息,
标记名=标记名
});
}

您的错误非常简单。如果您有一个返回
JsonResult
的操作,那么这意味着您还必须向该方法发送JSON编码的输入参数。只需删除
$.toJSON()
的用法,并将该对象用作
jQuery.ajax
data
参数的值(例如,请参见Darin的答案)

如果调用ASMX Web服务而不是ASP.NET MVC操作,则必须使用
contentType:“application/json;charset=utf-8”
并将所有Web方法参数的值转换为json,但要使用其他方式(请参阅)。但是ASP.NETMVC没有这样的要求。MVC转换您发送的关于
Parse
方法(
int.Parse
DateTime.Parse
等)的输入参数,而不是从JSON反序列化。因此,如果您搜索代码示例,请准确查看后端使用了哪些技术:ASP.NET MVC、ASMX web serveces或WFC

  • 您不必为所描述的操作类型发布json
  • 您不必手动将字段组合到地图中。Use.serializeArray()

    var postData=$('.myform').serializeArray()