【问题标题】:Controller parameter NULL when using jQuery POST and ASP.NET MVC使用 jQuery POST 和 ASP.NET MVC 时的控制器参数 NULL
【发布时间】:2009-05-11 14:46:20
【问题描述】:

我在控制器中处理 jQuery GET 请求没有问题,但是我无法将任何表单数据发送到 POST。客户端sn-p

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

结合控制器,

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

在 action 方法中检查时将导致 name 参数的 NULL 值,而我希望将 name 映射到方法参数。在这种情况下,所有其他对象(Request.Form)等似乎都是 NULL。我可以使用$.get 来做到这一点,但我认为我应该使用 POST 进行任何有副作用的操作。我正在使用 ASP.NET MVC 1.0、jQuery 1.2.6 和 Internet Explorer 7。

谢谢!

更新:在下面查看我的回答并表示歉意

【问题讨论】:

    标签: asp.net-mvc jquery


    【解决方案1】:

    抱歉,我在页面中有一个 $.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 对象的数据条目将被解析为字符串(data: "name=John" 也有效)。

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

    【讨论】:

    • 在这上面花了一个小时。感谢回答您自己的问题。 ;)
    【解决方案2】:

    我相信您的代码应该可以工作,您的 URL 是否正确并且您的路线设置是否正确?此外,您可以随时启动 Fiddler 以查看您对服务器的请求是什么,以及您是否传递了正确的项目。

    【讨论】:

    • 谢谢!生病尝试提琴手。我在 IE 中使用了 Web Development Helper,它似乎确实将正确的请求正文传递给了该方法。
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      这并不像制作一个 json 对象并把它扔给一个动作那么简单。

      here开始。人们编写了一些小脚本,这些脚本可以修饰 JSON 对象并准备好执行读取它并将其映射到属性或参数的操作。

      【讨论】:

      • 我会读这个;似乎该链接解决了如何将 JSON 传递给期望复杂的自定义类型作为参数的操作方法 - 我接下来想这样做!但现在我只是试图传递一个字符串,这似乎应该是直截了当的 - 谢谢
      • 是的,没错。传入 JSON 对象的好处在于您可以编写很酷的操作过滤器来反序列化和验证它们。这对于带有 MVC 的 AJAX 非常有用。希望对您有所帮助,感谢您的评论。
      猜你喜欢
      • 2020-10-12
      • 2012-06-20
      • 2021-07-01
      • 1970-01-01
      • 2014-08-28
      • 2016-06-08
      • 2016-06-15
      • 2012-07-04
      • 1970-01-01
      相关资源
      最近更新 更多