我试图使用AJAX删除实体。在我的控制器方法中,我有:
Name
在视图中我正在进行如下的AJAX调用:
AuthenticationType
AJAX链接正在构建为:
DisplayName
[HttpDelete]
public ActionResult Delete(int id)
{
//Deletion logic
return Content("OK");
}
操作未从链接获取请求,但如果我通过直接URL访问它实际上有效。此外,如果我删除未指定的$('#delete').click(function () {
if (confirm('Delete?')) {
var $link = $(this);
$.ajax({
url: this.href,
type: 'DELETE',
success: function (result) {
$link.parent().remove();
}
});
}
return false;
});
行并将控制器操作行@Html.ActionLink("Delete?", "Delete", new { id = Model.Id }, new { id = "delete", @class = "delete-link" })
替换为Delete
,则也可以。
我的观点是type: 'DELETE',
方法,我不想将其作为[HttpDelete]
请求处理,但我无法弄清楚我是否已经[HttpGet]
。我错过了其他的东西。
我很乐意,如果你们中的任何人能够帮助我理解为什么控制器动作DELETE
没有捕获来自AJAX Link的请求。
提前致谢。
答案 0 :(得分:1)
IIS
阻止了您的[HttpDelete]
方法。
在web.config
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
答案 1 :(得分:0)
可能是IIS不允许PUT和DELETE(参见ASP.NET Web API - PUT & DELETE Verbs Not Allowed - IIS 8)
检查Web.config
<system.webServer>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
这一改变对我有用。