2016-08-09 29 views
1

Ich versuche, eine Entität mit AJAX zu löschen. In meinem Controller-Methode habe ich:

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

Nach Ansicht Ich machte einen Anruf AJAX wie folgt:

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

AJAX Link als gebaut wird:

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

The Delete Aktion Ich erhalte die Anfrage nicht über den Link, aber wenn ich über die direkte URL darauf zugreife, funktioniert sie tatsächlich. Auch wenn ich die type: 'DELETE', Zeile lösche, die es nicht spezifiziert und die Controller-Aktionslinie [HttpDelete] mit [HttpGet] ersetze, funktioniert es auch.

Mein Punkt ist es ist eine DELETE Methode, die ich nicht als GET Anfrage behandeln möchte, aber ich kann nicht herausfinden, ob ich etwas anderes vermisse.

Ich würde gerne, wenn jemand von euch mir helfen könnte zu verstehen, warum die Controller-Aktion Delete(int id) nicht die Anfragen aus dem AJAX-Link kommt.

Vielen Dank im Voraus.

+0

Was ist der Wert von this.href ist, sollte es Controller Route anzeigen lassen. –

+0

@kostbone Ich habe gerade hinzugefügt, wie href generiert wird. Der Wert ist eine absolute URL als localhost/{Controller}/{Action}/X wobei X ein int ist. –

+0

@RoryMcCrossan Ich benutze MVC5 und für das, was ich sehe [FromUri] ist nicht verfügbar. –

Antwort

0

Es könnte sein, dass IIS nicht erlaubt PUT und DELETE (siehe ASP.NET Web API - PUT & DELETE Verbs Not Allowed - IIS 8)

überprüfen Sie Ihre Handler in Ihrer 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> 

diese Änderung für mich den Trick.

+0

Es hat nicht für mich funktioniert. 404. Der einzige Weg, den ich bisher gefunden habe, ist, die Controller-Aktion als [HttpGet] zu dekorieren und die Typzeile vom Ajax-Aufruf zu löschen. –

+0

Wie sieht Ihre 'Handler'-Sektion in Ihrer Web.config aus? – Nico

+0

Sie hatten Recht mit IIS. Ich habe getan was CristiPufu vorgeschlagen hat und es hat funktioniert. Vielen Dank. –

1

IIS blockiert Ihre [HttpDelete] Methode.

Fügen Sie diese in Ihrem web.config

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

Es funktionierte wie ein Charme. Vielen Dank. Du hattest wirklich recht. –