2012-07-15 9 views

Odpowiedz

9

ActionLink Metoda pomocnicza wyrenderuje znacznik anchor, klikając na to zawsze jest żądanie GET. Jeśli chcesz, aby było to żądanie POST.Należy zastąpić domyślny behviour przy wykorzystaniu małego javacsript

@ActionLink("Delete","Delete","Item",new {@id=4},new { @class="postLink"}) 

Teraz niektórzy jQuery kod

<script type="text/javascript"> 
    $(function(){ 
    $("a.postLink").click(function(e){ 
     e.preventDefault(); 
     $.post($(this).attr("href"),function(data){ 
      // got the result in data variable. do whatever you want now 
      //may be reload the page 
     }); 
    });  
    });  
</script> 

Upewnij się, że masz Action metoda HttpPost typu obsłużyć tego żądania

[HttpPost] 
public ActionResult Delete(int id) 
{ 
    // do something awesome here and return something  
} 
4

Co chciałbym zrobić, to owinąć wokół postaci html

@using(Html.BeginForm("YourAction","YourController", FormMethod.Post)){ 

<button>Hello</button> 

} 

Zamiast linka możesz użyć przycisku.

Jeśli naprawdę chcesz zastosować link, może trzeba trochę javascript

coś takiego:

$("#idOfYourLink").click(function(){ 
var form = $(this).parents('form:first'); 
form.submit(); 
}); 
0

Jeśli uważasz, że ... nie ma tagu dla łącza w HTML, który robi STANOWISKO. I dlatego nie można wymusić połączenia, aby wykonać test POST (i nie ma to żadnego sensu). Aby użyć "POST", należy "POST" coś. I że coś powinno być formą, lub możesz zrobić POST używając funkcji javascript dla AJAX. W każdym razie, jeśli potrzebujesz POST bez postu, powinieneś przejrzeć swój resourcemodel, coś śmierdzi.

+0

Jest to dość powszechne i całkowicie akceptowalne w społeczności Rails na przykład jako sposób de Lete obiektów. – wgpubs

1

Nie można umieścić elementu POST na serwerze WWW za pomocą elementu .

Możesz użyć Javascript, aby uchwycić zdarzenie click, zatrzymać nawigację i wykonać AJAX POST na serwerze, ale jeśli użytkownik ma wyłączoną obsługę JavaScript, nic się nie stanie.

Czy trzeba użyć elementu <a>, lub po prostu coś, co przypominaelement <a>?

Warto również wspomnieć o tym, że warto spojrzeć na AjaxLink. Pozwala na łatwe użycie elementu <a> do wykonania testu POST AJAX.

7

Przypuszczam, że jeśli potrzebujesz czegoś takiego, to dla akcji, która będzie robić coś "stałego" po stronie serwera. Na przykład usunięcie obiektu w bazie danych.

Powyżej znajduje się pełna przykładem robi kasowania za pomocą łącza i publikacji: http://www.squarewidget.com/Delete-Like-a-Rock-Star-with-MVC3-Ajax-and-jQuery

z poprzedniego związku (zalecane i tak czyta):

DELETE ogniwem w widoku:

@Ajax.ActionLink("Delete", "Delete", "Widget", 
       new {id = item.Id}, 
       new AjaxOptions { 
        HttpMethod = "POST", 
        Confirm = "Are you sure you want to delete this widget?", 
        OnSuccess = "deleteConfirmation" 
       }) 

trochę JS:

function deleteConfirmation(response, status, data) { 

     // remove the row from the table 
     var rowId = "#widget-id-" + response.id; 
     $('.widgets').find(rowId).remove(); 

     // display a status message with highlight 
     $('#actionMessage').text(response.message); 
     $('#actionMessage').effect("highlight", {}, 3000); 
    } 
+1

świetny link. Chciałbym zaznaczyć dwie odpowiedzi jako prawidłowe, więc mam nadzieję, że wystarczy upvote. dzięki – wgpubs

+0

Link już nie działa –

+0

Link zaktualizowany ... – Romias

Powiązane problemy