代码之家  ›  专栏  ›  技术社区  ›  martijn_himself

使用jquery post和asp.net mvc时控制器参数为空

  •  3
  • martijn_himself  · 技术社区  · 16 年前

    在控制器中处理jquery get请求没有问题,但是我无法获取任何要发布的表单数据。客户端代码段

    $.post(url,{name:"John"},function(result){ 
        //process result
    });
    

    结合控制器,

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Save(string name)
    {
        return Json("Success!");
    }
    

    在action方法内部检查时,将导致name参数的值为空,而我希望name映射到方法参数。此外,此上下文中的所有其他对象(request.form)等似乎都为空。我可以用一个 $.get 但是我想我应该做任何有副作用的手术。我使用的是ASP.NET MVC 1.0、JQuery 1.2.6和Internet Explorer 7。

    谢谢!

    更新 请看下面我的回答和谦卑的道歉

    4 回复  |  直到 14 年前
        1
  •  6
  •   martijn_himself    16 年前

    抱歉,伙计们,我在页面中有一个$.AjaxSetup条目,它将默认ContentType重写为application/json。

    使用默认ContentType时,如下所示:

    $.ajax({ url,
             type: "POST",
             contentType: "application/x-www-form-urlencoded",
             success: function(result) { alert(result); },
             data: { name: "John" }
            });
    

    它可以工作,因为默认情况下processData为true,这意味着带有JSON对象的数据条目将被解析为字符串(数据:“name=john”也可以工作)。

    很抱歉浪费您的时间:)感谢Mark对传递JSON对象的建议,接下来我会这么做,因为这看起来很酷。

        2
  •  2
  •   KnackeredCoder    16 年前

    我相信你的代码应该有效,你的网址和路线设置正确吗?此外,你可以随时启动 Fiddler 查看您对服务器的请求是什么,以及您是否传递了正确的项目。

        3
  •  1
  •   Gabriel Florit    16 年前

    可能是save(string name)方法需要字符串化的JSON吗?试试这个:

    $.post(url,
    "{'name':'John'}", function(result){
    });
    
        4
  •  1
  •   Mark Dickinson    16 年前

    这并不像制作一个JSON对象并将其抛出一个动作那么简单。

    从开始 here .人们已经编写了一些小脚本,让JSON对象穿戴整齐,并准备好让操作读取它,并将其映射到属性或参数。