在AJAX调用中发送参数

时间:2010-09-05 09:06:54

标签: asp.net-mvc-2 jquery

其他人之前已经问过这个问题,但我无法使用他们的答案。

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

 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)
        {
          ....
        }

3 个答案:

答案 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.ParseDateTime.Parse等转换您发送的输入参数,而不是从JSON反序列化。因此,如果您搜索代码示例,请查看后端使用的技术:ASP.NET MVC,ASMX Web服务或WFC。

答案 2 :(得分:0)

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

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