2015-04-12 16 views
0

我試圖呼籲用戶刪除的方法點擊獲得404從一個iframe調用刪除方法時

@Html.ActionLink(
        " ", 
         "DeleteAttachment", 
        new { attachmentid = item.bookingattachmentid }, 
        new { 
         @class = "buttondelete" 
       }) 

顯示正確的網址,當我將鼠標放在刪除鏈接...

http://localhost:53712/Booking/DeleteAttachment?attachmentid=51693 

但點擊後,服務器響應「無法找到資源」。

搜索谷歌,我還沒有發現任何說我不能從iframe調用刪除帖子。 iframe的來源與父代相同。

這是控制器動作

[HttpPost] 
    public string DeleteAttachment(int bookingattachmentid) 
    { 
     bookingattachment bookingattachment = db.bookingattachments.Find(bookingattachmentid); 
     db.bookingattachments.Remove(bookingattachment); 
     db.SaveChanges(); 
     return "success"; 
    } 
+0

你能告訴你的控制器動作是怎麼樣的嗎?是否可以用'[HttpDelete]'或'[HttpPost]'屬性來裝飾它?還有,如果你把這個URL放在瀏覽器的地址欄中會發生什麼? –

+0

是的,我更新了問題 - 相同的結果,但我相信那是因爲它是一個GET,對吧?我在任何直接放入瀏覽器url的刪除方法中獲得了404。 – tintyethan

+0

是的,這是因爲錨發送了GET動詞。如果您希望能夠調用此控制器操作,則客戶端需要使用POST謂詞。 –

回答

1

看來你的控制器動作飾有[HttpPost]動詞。所以爲了調用它,你需要使用HTTP動詞POST。在ASP.NET MVC中,Html.ActionLink會生成一個錨,然後使用該動詞GET。這就是爲什麼你得到一個404

如果你想能夠調用您可能寧願使用HTML表單此控制器操作:如果你不想使用HTML <form>

@using (Html.BeginForm("DeleteAttachment", "Booking", new { attachmentid = item.bookingattachmentid }, FormMethod.Post)) 
{ 
    <input type="submit" class="buttondelete" value="Delete Attachment" /> 
} 

你可能會考慮使用AJAX來調用你的控制器動作,因爲它允許你使用POST動詞:

@Ajax.ActionLink(
    linkText: " ", 
    actionName: "DeleteAttachment", 
    controllerName: "Booking", 
    routeValues: new { attachmentid = item.bookingattachmentid }, 
    ajaxOptions: new AjaxOptions { HttpMethod = "POST" } 
) 
+0

當然。謝謝Darin。 – tintyethan