2016-08-09 3 views
1

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アクションを次のように私はAJAX呼び出しを作っていたビューで

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

をリンクからリクエストが得られませんが、直接URLにアクセスすると実際に動作します。また、type: 'DELETE',行を削除してそれを指定せずに残し、コントローラアクション行[HttpDelete][HttpGet]と置き換えても機能します。

私の指摘はDELETEです。私はGETリクエストとして扱いたくありませんが、他に何か不足しているかどうかはわかりません。

コントローラの動作Delete(int id)がAJAX Linkからの要求を捕まえていない理由を理解できる人がいれば、私は大好きです。

ありがとうございます。これは、IISがPUTを許可し、削除しないことが考えられ

+0

でこれを追加します。 –

+0

@kostbone私はちょうどhrefが生成される方法を追加しました。それの値は、絶対URLです。localhost/{Controller}/{Action}/Xここで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> 

であなたのハンドラを確認してください。

+0

それは私のために働かなかった。これまで私が見つけた唯一の方法は、Controllerアクションを[HttpGet]として装飾し、Ajax呼び出しからタイプラインを削除することです。 –

+0

'Handlers'セクションはWeb.configのように見えますか? – Nico

+0

あなたはIISについて正しくありました。私は@CristiPufuが提案したことをやってくれました。ありがとう。 –

1

IISは、あなたの[HttpDelete]メソッドをブロックしています。

はthis.hrefの価値は何、それはコントローラのルートと一致している必要があり、あなたのweb.config

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

それは魅力のように働いた。ありがとう。あなたは本当に正しかった。 –

関連する問題