2016-08-09 2 views
1

AJAX를 사용하여 엔티티를 삭제하려고합니다. 내 컨트롤러 방법에서 내가 가진 : 뷰에서

[HttpDelete] 
public ActionResult Delete(int id) 
{ 
    //Deletion logic 
    return Content("OK"); 
} 

다음과 같이 내가 AJAX 호출을했다 :

$('#delete').click(function() { 
    if (confirm('Delete?')) { 
     var $link = $(this); 
     $.ajax({ 
      url: this.href, 
      type: 'DELETE', 
      success: function (result) { 
       $link.parent().remove(); 
      } 
     }); 
    } 
    return false; 
}); 

AJAX 링크로 건설되고있다 :

@Html.ActionLink("Delete?", "Delete", new { id = Model.Id }, new { id = "delete", @class = "delete-link" }) 

Delete 행동 링크에서 요청을 받고 있지 않지만 직접 URL을 통해 액세스하면 실제로 작동합니다. 또한 지정되지 않은 채로 type: 'DELETE', 행을 삭제하고 컨트롤러 작업 줄을 [HttpDelete]으로 바꾼다면 [HttpGet]으로도 작동합니다.

요점은 DELETE입니다. 나는 GET 요청으로 처리하고 싶지 않지만 다른 것이 누락되어 있는지 알아낼 수는 없습니다.

컨트롤러 동작 Delete(int id)이 AJAX 링크에서 오는 요청을 포착하지 못하는 이유를 이해하는 데 도움을 줄 수 있다면 정말 좋을 것입니다.

미리 감사드립니다.

+0

이 추가, 그것은 컨트롤러 경로와 일치해야합니다. –

+0

@kostbone 방금 href가 생성되는 방식을 추가했습니다. 값은 localhost/{Controller}/{Action}/X로 절대 URL입니다. 여기서 X는 int입니다. –

+0

@RoryMcCrossan MVC5를 사용하고 있으며 [FromUri]를 볼 수 없습니다. –

답변

0

그것은 (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> 

이 변경에 처리기를 확인 나를 위해 속임수를 썼는지 IIS가 PUT 수 및 삭제하지 않습니다 수 있습니다.

+0

그것은 나를 위해 작동하지 않았다. 지금까지 내가 찾은 유일한 방법은 Controller 액션을 [HttpGet]으로 꾸미고 Ajax 호출에서 타입 라인을 삭제하는 것이다. –

+0

'Handlers' 섹션은 Web.config에서 어떻게 보이나요? – Nico

+0

당신은 IIS에 대해 옳았습니다. 나는 크리스티 푸푸 (ChristiPufu)가 제안한 것과 그것이 효과가있는 것을했다. 감사. –

1

IIS 귀하의 [HttpDelete] 방법을 차단하고 있습니다.

이 this.href의 가치 무엇 당신의 web.config

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true" /> 
</system.webServer> 
+0

그것은 매력처럼 작동했습니다. 감사. 당신은 정말로 옳았습니다. –

관련 문제