2011-08-03 22 views
6

Co próbuję zrobić: Spróbuj usunąć rekord za pomocą "właściwego" usunięcia HTTP.Problemy z prawidłowym usuwaniem HTTP za pomocą Ajax.ActionLink

Kod Kontroler:

[HttpDelete] 
    public void DeleteRun(int RunId) 
    { 
     repository.RemoveEntry(RunId); 

    } 

Razor Widok:

   @Ajax.ActionLink("Delete","DeleteRun",new {RunId = run.RunId}, 
         new AjaxOptions() { Confirm = "Are you sure you want to delete this entry?", 
              HttpMethod = "DELETE", 
              OnComplete = string.Format("DeleteRunInTable({0})",run.RunId) 

         }) 

JavaScript (w osobnym dołączonego pliku):

function DeleteRunInTable(RunId) { 
     $("tr[data-runid=" + RunId).remove(); 
} 

link metoda actionlink tworzy:

<a data-ajax="true" data-ajax-complete="DeleteRunInTable(11)" data-ajax-confirm="Are you sure you want to delete this entry?" data-ajax-method="DELETE" href="/Runs/Delete/11">Delete</a> 

Nie jestem pewien, czy część javascript działa jeszcze, ale nie martwię się o to. Próbujesz zrobić to krok po kroku :). Teraz działa po prostu jak tradycyjny tag, a po kliknięciu linku po prostu wykonuje żądanie GET z href. Oczywiście dostaję błąd 404 z powodu [HTTPDelete] i umieszczam na moim kontrolerze. Jestem całkiem nowy w tworzeniu stron internetowych, więc jestem pewien, że istnieją inne sposoby w javascript lub jquery, aby zrobić to samo, ale robię to, co wiem w tym momencie.

Odpowiedz

9

Powinno to zadziałać tak, jak zrobiłem to sam ostatnio i wszystko, co musiałem zrobić, to określić HttpMethod w argumencie AjaxOptions.

Należy również upewnić się, że na stronie znajduje się skrypt jquery.unobtrusive-ajax.js .

+0

Dzięki za odpowiedź ... Nie faktycznie usunąłem je. Myślałem, że nie są potrzebne. Myślałem, że ajax.actionlink użyje jquery. Czy się mylę? Jeśli dobrze pamiętam na pluralsight, to oglądałem jeden z filmów z K Scottem Allenem i on skasował oba skrypty ajaxowe ajaxów, gdy korzystał z ajax.actionslink. Jestem całkiem początkującym w tym, więc może actionlink używa skryptów ajaxowych Microsoftu w niektórych przypadkach, aw innych przypadkach nie. Nie jestem pewien :) – coding4fun

+0

To była moja wina. Skrypty ajax ajax, które nie są potrzebne, pojawiają się. Brakowało mi jednego skryptu na stronie, o którym nie wiedziałem: jquery.unobtrusive-ajax.min.js. Prawdopodobnie moim następnym pytaniem będzie prawdopodobnie, jeśli jest dobry sposób, aby stwierdzić, kiedy brakuje skryptu na stronie zamiast go (nie działa): P. – coding4fun

+0

ahh fajne, miałem wrażenie, że to brakujący skrypt ... po prostu nie był właściwy :) Zaktualizowałem swoją odpowiedź, aby odzwierciedlić poprawny skrypt na wypadek, gdyby przyszli użytkownicy mieli ten sam problem i nie przeczytali komentarze. – lomaxx

4

To było proste rozwiązanie ... brakowało mi jquery.unobtrusive-ajax.min.js: P. Zostawiam wpis tutaj, aby każdy, kto próbował zrobić coś podobnego do tego, co robię, będzie wiedział, że jest to możliwe, ale upewnij się, że dołączasz jquery & jquery.unobtrusive.

Edytuj: Tylko dla wyjaśnienia, że ​​ActionLink działa z JQuery, jeśli używasz MVC3, w przeciwnym razie używa bibliotek javascript microsoft.