2013-03-01 13 views
8

Po kliknięciu przycisku Prześlij formularz, wywoływane jest działanie kontrolera, który ma atrybut HTTPPost, ale co jeśli chcę zadzwonić lub wykonać działanie, gdy normalny przycisk HTML kliknięciu Chociaż następujące artykułyWywołanie określonej akcji kontrolera po kliknięciu przycisku HTML (przycisk Nie przesyłaj lub przycisk formularza) Asp.net MVC

http://www.codeproject.com/Tips/198477/Calling-a-MVC-Controller-and-Action-Method-using-H

HTML button calling an MVC Controller and Action method

opowiada podejście, ale oba te korzystają nazwę kontrolera w widoku, więc zobacz musi wiedzieć o kontrolerze, patrzę g dla odpowiedzi, której widok nie będzie musiał wiedzieć o kontrolerze. bo widoki musi być niezależny od kontrolera, widoki nie powinien wiedzieć o kontrolerze Tak więc, jeśli znasz odpowiedź następnie odpowiedz

Odpowiedz

16

dowolną formę, która kieruje użytkownika do URL stworzony przez

<a href='@Url.Action("{action}", "{controller}")'> click me </a> 

lub

@using(BeginForm("{action}", "{controller}") 

zrobi to, co chcesz.

To może być z

  • formie
  • przycisk łącza

Jest to miejsce, które ma znaczenie. Widok nie "nic" nie wie o akcji lub kontrolerze. Pomocnik to robi.

0

Aby wykonać akcję MVC od strony klienta (tj. Z widoku), należy nacisnąć adres URL (z dowolnym czasownikiem: get, post, put, etc). W związku z tym, aby wykonać formularz działania w widoku, musisz znać adres URL tej akcji, domyślnie URL jest bezpośrednio odwzorowywany na controllername/actionname, ale możesz go ponownie zdefiniować, jeśli chcesz utworzyć więcej abstrakcji między widokiem a kontrolerem.

Biorąc to pod uwagę, twój przycisk musi być tylko linkiem do adresu URL lub połączony z js, aby wykonać żądanie HTTP Ajax.

Nadzieję, że pomaga.

0

Nie można wykonać 2 akcji na tym samym kontrolerze o tej samej nazwie i tym samym czasowniku HTTP. Więc to, o co prosisz, nie ma sensu. Można wywołać tę samą akcję kontrolera, co ta, która wyrenderowała widok bez określenia akcji i nazwy kontrolera. Powodem, dla którego Html.BeginForm() działa bez określenia akcji i nazwy kontrolera, jest to, że formularz wysyła żądanie POST do serwera i można rozróżnić 2 akcje.

Powiązane problemy