我正在尝试访问一个简单的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到网址。有人可以帮忙吗?
答案 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 =。我不记得参数化时是否重要。