从控制器中的ajax POST空接收参数+在firebug MVC 4中传递参数

时间:2013-05-23 08:21:14

标签: asp.net-mvc jquery asp.net-mvc-4 asp.net-ajax

我已经看过网,弄清楚我的错误是什么。我发现我尝试的所有建议都没有任何成功。我在我的控制器中访问httppost动作,但参数保持为空。

AJAX功能

var dataPost = { 'id': id, 'val': val };
                    debugger;
                    $.ajax({
                        type: 'POST',
                        url: '/Extensions/UpdateJson',
                        data: dataPost ,
                        contentType: 'json',
                        success: function () {
                            alert("succes");
                        },
                        error: function () {
                            alert("error");
                        }
                    });

在调试时填充DataPost。

控制器

    [HttpPost]
    public ActionResult UpdateJson(string id, string val)
    {
        //do stuff
        return Json(true);
    }

我在控制器中使用的参数与我的Ajax函数中的参数名称相同。传递的格式是json,我也尝试使用以下方法填充数据:

var dataPost = { 'id': 'id', 'val': 'val' };

但这没有任何区别。我也试过使用类,比如 - >

public class ScheduleData
{
    public string id { get; set; }
    public string val { get; set; }
}

控制器

    public ActionResult UpdateJson(ScheduleData data)
    {//Do something}

任何帮助将不胜感激。提前致谢

1 个答案:

答案 0 :(得分:6)

  

传递的格式是json

不,一点也不。您没有发送任何JSON。你做的是

data: { 'id': id, 'val': val }

但正如文档清楚地解释这是使用$.param函数,后者又使用application/x-www-form-urlencoded编码。

因此,请从$ .ajax调用中删除此contentType: 'json'属性。

或者如果你真的想发送JSON,那么就这样做:

var dataPost = { 'id': id, 'val': val };
$.ajax({
    type: 'POST',
    url: '/Extensions/UpdateJson',
    data: JSON.stringify(dataPost),
    contentType: 'application/json',
    success: function () {
        alert("succes");
    },
    error: function () {
        alert("error");
    }
});

需要注意的事项:

  • 使用JSON.stringify(dataPost)以确保您向服务器发送JSON字符串
  • contentType: 'application/json'因为这是正确的Content-Type值。