Jquery ajax调用不会访问控制器:无法加载资源:服务器响应状态为500(内部服务器错误)

我一直无法加载资源:服务器响应状态为500(内部服务器错误),表明对我的控制器方法的调用不起作用,我不知道原因:

var user = "founder"; var clanName = "superClan"; var SuspensionDate = Date.now; $.ajax({ url: '@Url.Action("SuspendUserFromClan", "ChatMethods")', type: "POST", contentType: "application/json; charset=utf-8", data: { 'ClanName': clanName, 'UserToSuspend': userToAdd, 'DateSuspendedTill': SuspensionDate }, dataType: "json", traditional: true, success: function (data, status, xhr) { alert(data); }, error: function () { alert("An error has occured!!!"); } }); 

我的控制器:

 public JsonResult SuspendUserFromClan(string ClanName, string UserToSuspend, DateTime DateSuspendedTill) { ... } 

在执行类型时将[HttpPost]添加到控制器:来自ajax的“POST”

 [HttpPost] public JsonResult SuspendUserFromClan(string ClanName, string UserToSuspend, DateTime DateSuspendedTill) { ... } 
 var SuspensionDate = new Date(); $('#SuspendUser').on("click", function () { $.ajax({ url: '@Url.Action("SuspendUserFromClan", "ChatMethods")', type: "POST", // contentType: "application/json; charset=utf-8", data: { 'ClanName': clanName, 'UserToSuspend': userToAdd, 'DateSuspendedTill': SuspensionDate.toUTCString() }, dataType: "json", traditional: true, success: function (data, status, xhr) { alert(data); }, error: function () { alert("An error has occured!!!"); } }); }); 

解决了这个问题。

该错误发生在MVC Razor引擎或其他地方。 我可以解释这个并重新创建bug。 我收到了错误:

无法加载资源:服务器响应状态为500(内部服务器 – 我的URL –

奇怪的是,在我向PartialView添加一些Razor代码之前它刚刚工作。

我之前看到的部分视图(为简洁起见省略了一些部分):

 @model DataDisplay.Models.AllItems // .... @foreach (var item in Model) { @item.ID@item.UserName@item.FullPath } 

我添加到Razor的简单代码似乎给了我一个错误是一个if语句,它使我的代码如下所示:

 @model DataDisplay.Models.AllItems // .... @if (Model.Count > 0) { @foreach (var item in Model) { @item.ID@item.UserName@item.FullPath } } 

也许您已经看到了错误的Razor代码,但请继续。

在我添加该代码之后,我立刻得到了500错误,并且我还得到了一个指示(在Chrome开发工具中)jQuery中出现错误,该错误发生在jQuery脚本中的行上,如下所示:

xhr.send((s.hasContent && s.data)|| null);

是的,我正在调用jquery.load()来加载当前页面中的partialview。 我四处搜索,发现以下SO条目引导我回答: 发布并获取相同的签名

然而,让我解决问题的答案是mohrtan

我将代码添加到我的控制器:

 [AcceptVerbs("Get", "Post")] 

然后,当我跑步时,我在建造时收到了警告:

警告11“@”字符后出现意外的“foreach”关键字。 进入代码后,您不需要使用“@”作为“foreach”等构造的前缀。 filename.cshtml 6 10 classname

请注意,这会导致500错误,但在编译时只是一个警告。

我从foreach中删除了额外的@字符,一切运行正常。

这一切似乎都是一个错误的完美风暴,导致错误的红色鲱鱼,所以我希望这有助于某人。