Czy ktoś może mi powiedzieć, jak mogę przesłać wartości do kontrolera za pomocą metody ActionLink i POST?
Nie chcę używać przycisków.
Myślę, że ma coś z jQuery.
asp.net-mvc
actionlink
šljaker
źródło
źródło
Odpowiedzi:
Nie możesz użyć,
ActionLink
ponieważ po prostu renderuje<a>
tag kotwicy .Możesz użyć posta jQuery AJAX .
Lub po prostu wywołaj metodę przesyłania formularza z lub bez jQuery (który byłby inny niż AJAX), być może w
onclick
przypadku dowolnej kontroli.źródło
Jeśli używasz ASP MVC3, możesz użyć Ajax.ActionLink (), która pozwala określić metodę HTTP, którą możesz ustawić na „POST”.
źródło
jquery.unobtrusive-ajax.min.js
”. W przeciwnym razie po kliknięciu będzie nadal wykonywał GET zamiast POST. Składnia do utworzenia linku byłaby następująca:@Ajax.ActionLink("Delete", "Delete", new { id = item.Id }, new AjaxOptions {HttpMethod = "POST"})
"data-ajax"="true, "data-ajax-url"=<your link> and "data-ajax-method"="Post"
. Przy okazji, używam ASP.NET MVC 3Możesz użyć jQuery, aby wykonać POST dla wszystkich swoich przycisków. Po prostu nadaj im tę samą nazwę CssClass.
Użyj "return false;" na końcu zdarzenia javascript onclick, jeśli chcesz wykonać po stronie serwera RedirectToAction po poście, w przeciwnym razie po prostu zwróć widok.
Razor Code
Kod JQuery
DO#
źródło
@Aidos miał właściwą odpowiedź, po prostu chciał ją wyjaśnić, ponieważ jest ona ukryta w komentarzu do jego postu opublikowanego przez @CodingWithSpike.
źródło
Oto odpowiedź wypieczona w domyślnym projekcie ASP.NET MVC 5, który, jak sądzę, ładnie realizuje moje cele dotyczące stylizacji w interfejsie użytkownika. Formularz prześlij za pomocą czystego javascript do jakiegoś formularza zawierającego.
W pełni pokazany przypadek użycia to menu wylogowania na pasku nawigacyjnym aplikacji internetowej.
źródło
ActionLink nigdy nie odpali postów. Zawsze wyzwala żądanie GET.
źródło
Użyj następującego linku Call the Action:
Aby przesłać wartości formularza, użyj:
Przekaże dane do Kontrolera klienta i CustomerSearchResults Action.
źródło
Użyj tego linku wewnątrz Ajax.BeginForm
;)
źródło
Moje rozwiązanie tego problemu jest dość proste. Mam stronę, na której klient wyszukuje jeden po całym e-mailu, a drugi po części, częściowo pobiera i wyświetla listę lista ma link do akcji, który wskazuje na wynik działania o nazwie GetByID i przekazuje identyfikator
GetByID pobiera dane dla wybranego klienta, a następnie zwraca
która jest metodą postu
źródło
Był to dla mnie trudny problem do rozwiązania. Jak mogę zbudować łącze dynamiczne w maszynce do golenia i html, które może wywołać metodę akcji i przekazać wartość lub wartości do określonej metody akcji? Rozważyłem kilka opcji, w tym niestandardowy pomocnik HTML. Właśnie wymyśliłem proste i eleganckie rozwiązanie.
Widok
Metoda działania
Chodzi o to, że Url.Action nie dba o to, czy metoda akcji to GET czy POST. Będzie mieć dostęp do dowolnego typu metody. Możesz przekazać swoje dane do metody akcji za pomocą
obiekt routeValues. Próbowałem tego i działa. Nie, z technicznego punktu widzenia nie publikujesz postu ani nie przesyłasz formularza, ale jeśli obiekt routeValues zawiera Twoje dane, nie ma znaczenia, czy jest to post, czy get. Aby wybrać właściwą metodę, możesz użyć określonej sygnatury metody akcji.
źródło
Zrobiłem ten sam problem, używając następującego kodu:
źródło
To jest moje rozwiązanie problemu. To jest kontroler z 2 metodami akcji
W widoku renderuję konstrukcję według następującej struktury.
Ciekawe miejsca w Razor View :
Funkcja JavaScript
confirmDelete(id)
wywoływana po kliknięciu linku wygenerowanego za pomocą@Html.ActionLink
;confirmDelete()
funkcja wymaga identyfikatora klikniętego elementu. Ten element jest przekazywany zonClick
modułu obsługiconfirmDelete("+feedback.Id+");return false;
Zwróć uwagę, że program obsługi zwraca false, aby zapobiec domyślnej akcji - czyli żądaniu odebrania celu.OnClick
Zdarzenie dla przycisków mogłoby być dołączone z jQuery dla wszystkich przycisków na liście jako alternatywa (prawdopodobnie będzie jeszcze lepiej, ponieważ będzie mniej tekstu na stronie HTML, a dane będą mogły być przekazywane przezdata-
atrybut).Formularz ma
id=myForm
, aby go znaleźćconfirmDelete()
.Form zawiera
@Html.HttpMethodOverride(HttpVerbs.Delete)
, aby użyćHttpDelete
czasownika, jako czynność oznaczoną znakiemHttpDeleteAttribute
.W funkcji JS używam potwierdzenia akcji (za pomocą zewnętrznej wtyczki, ale standardowe potwierdzenie też działa dobrze. Nie zapomnij użyć
bind()
w oddzwonieniu lubvar that=this
(cokolwiek wolisz).Formularz ma ukryty element z
id='idField'
iname='id'
. Więc zanim formularz zostanie przesłany po potwierdzeniu (result==true
), wartość ukrytego elementu jest ustawiana na argument wartość przekazana, a przeglądarka prześle dane do kontrolera w następujący sposób:URL żądania :
http://localhost:38874/Feedback/Delete
Metoda żądania: Kod stanu POST: 302 znaleziony
Nagłówki odpowiedzi
Lokalizacja: / Host opinii: localhost: 38874 Dane formularza X-HTTP-Method-Override: DELETE id: 5
Jak widać, jest to żądanie POST z X-HTTP-Method-Override: DELETE i danymi w treści ustawionymi na „id: 5”. Odpowiedź zawiera kod 302, który przekierowuje do akcji Index, dzięki czemu po usunięciu odświeżasz ekran.
źródło
Poleciłbym pozostać czystym zgodnie z zasadami REST i używać usuwania HTTP do usuwania. Niestety specyfikacje HTML zawierają tylko HTTP Get & Post. Tag może tylko Get HTTP. Znacznik formularza może wykonywać polecenia HTTP Get lub Post. Na szczęście, jeśli używasz Ajax, możesz wykonać HTTP Delete i to właśnie zalecam. Szczegółowe informacje można znaleźć w następującym poście: Http Deletes
źródło
Wywołanie $ .post () nie zadziała, ponieważ jest oparte na Ajax. Dlatego do tego celu należy zastosować metodę hybrydową.
Oto rozwiązanie, które działa dla mnie.
Kroki: 1. Utwórz adres URL dla href, który wywoła metodę z adresem URL i parametrem 2. Wywołaj normalny POST za pomocą metody JavaScript
Rozwiązanie:
W .cshtml:
Uwaga: metoda anonimowa powinna być opakowana w (....) () tj
postGo jest zdefiniowane jak poniżej w JavaScript. Reszta jest prosta ...
@ Url.Action ("Widok") tworzy adres URL połączenia
{'id': @ receiver.ReceiptId} tworzy parametry jako obiekt, który z kolei jest konwertowany na pola POST metodą postGo. Może to być dowolny parametr, jakiego potrzebujesz
W JavaScript:
Referencyjne adresy URL, których użyłem do postGo
GET / POST bez AJAX przy użyciu jQuery (wtyczka?)
http://nuonical.com/jquery-postgo-plugin/
źródło
jQuery.post()
będzie działać, jeśli masz niestandardowe dane. Jeśli chcesz opublikować istniejący formularz, jest łatwiejszy w użyciuajaxSubmit()
.I nie musisz konfigurować tego kodu w samym
ActionLink
sobie, ponieważ możesz dołączyć obsługę linku wdocument.ready()
zdarzeniu (co i tak jest preferowaną metodą), na przykład za pomocą$(function(){ ... })
triku jQuery.źródło
Przeszedłem przez to wymagając POST ze strony wyszukiwania (indeksu) na stronę wyników. Nie potrzebowałem tak dużo, jak stwierdził @Vitaliy, ale wskazało mi to właściwy kierunek. Wszystko, co musiałem zrobić, to:
Mój kontroler miał następującą metodę podpisu:
źródło
Jest to pobierane z przykładowego projektu MVC
źródło