当jQuery AJAX调用路由时,需要帮助MVC路由

时间:2009-05-12 01:11:02

标签: jquery asp.net-mvc ajax

我正在尝试访问一个简单的ASP.NET MVC路由,但它出错了:

  

参数字典包含一个   参数的null条目   'isFoo'是非可空类型   方法的'System.Boolean'   “System.Web.Mvc.ActionResult   转换(Boolean,System.String)'   ......等等等等。

IE中。布尔属性未设置...这意味着该值未被传入。

所以我有一个名为Transform(..)的Action方法,它不接受带有jQuery的HTTP-Posted的值。这就像我发布的值丢失了:(

MVC站点是库存标准ASP.NET MVC文件 - >新 - > MVC Web应用程序。除了添加新的控制器类之外,没有任何改变。就是这样。

using System.Web.Mvc;
using System.Web.Mvc.Ajax;

namespace WorldDomination.EbonHawk.Web.Controllers
{
    public class AjaxController : Controller
    {
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Transform(bool isFoo, string bar)
        {
            // blah....
            return View();
        }

    }
}

以及如何使用jQuery调用它。

$.ajax({
    type: "POST",
    url: "/ajax/transform",
    data: "isfoo=true&bar=" + $("#Bar").val(),
    contentType: "application/json;",
    dataType: "json",
    success: function() { alert("it worked"); },
    failure: function() { alert("Uh oh"); }
});

当我使用FireBug时,它肯定会显示我正在尝试POST到网址。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:3)

乍一看,您似乎对jQuery感到困惑......

您告诉它您的数据类型是JSON,但提交文本。从您的AJAX帖子中删除您的dataType子句,jQuery将适当地找出并提交您的帖子。

答案 1 :(得分:1)

杰夫说的话。或者,如果您希望保留dataType,则您的data行应如下所示:

...
data: { isfoo: true, bar: $("#Bar").val() },
...

答案 2 :(得分:0)

ASP.NET MVC控制器操作只是将POST或GET参数转换为函数的参数。如果使用其中一种HTTP方法正确传递参数,那么你应该没问题。但是,似乎你的jQuery工作不正常。

您应该将$ .ajax调用更改为如下

$.ajax({
    type: "POST",
    url: "<%= Url.Action("Transform", "Ajax") %>",
    data: { isfoo: true, bar: $("#Bar").val() },
    contentType: "application/json;",
    dataType: "json",
    success: function() { alert("it worked"); },
    failure: function() { alert("Uh oh"); }
});

请注意,此问题与路由系统无关。如果您想使用路由来使用参数调用干净的URL,则需要将方法更改为POST。总的来说,你现在拥有它的方式更加清晰。但是,使用路由系统为您的服务生成基本URL会很好。

修改

如果你像使用数据选项那样使用GET参数,我认为你还需要使isfoo = read isFoo =。我不记得参数化时是否重要。