2009-07-25 12 views
5

W jaki sposób mogę utworzyć metodę w kontrolerze i po prostu wstawić kilka argumentów i wykreśla ją po kliknięciu formularza przesłanego? Pod maską, jak znaleźć właściwą metodę i jak się domyślam, że chcę tylko tych argumentów?W jaki sposób asp.net mvc to rozgryźć?

Odpowiedz

8

W skrócie:

  1. Silnik routingu obsługuje HttpRequest i sprawdza żądany adres URL. Po znalezieniu pierwszego dopasowania trasy tworzy nową instancję o numerze MvcRouteHandler i przekazuje jej uszkodzone tokeny adresu URL w RouteValueDictionary.

  2. Trasa MvcRouteHandler przejmuje żądanie i próbuje utworzyć instancję klasy kontrolera. Zgodnie z konwencją wyszukuje klasę o nazwie "XXXXXXController", w której X są zastępowane przez parametr {controller} na trasie.

  3. Po znalezieniu kontrolera wywołuje odpowiednią dla niego metodę podaną parametrem {akcja} trasy. Wszelkie nazwane argumenty, takie jak {id}, które istnieją w trasie, są przekazywane jako parametry metody.

Zasadniczo wszystko, co ASP.Net MVC "wie", pochodzi z informacji o trasie. Nie jest w stanie odgadnąć parametrów z powietrza - muszą one pochodzić z analizy trasy. Jeśli informacji nie ma w żądanym adresie URL, nie można go przekazać do metody.

Należy również zauważyć, że można zastąpić zachowanie szkieletu, ustawiając trasy zamiast alternatywnych procedur obsługi zamiast MvcRouteHandler. Struktura jest dość rozszerzalna, więc możesz włączyć niestandardową funkcjonalność w wielu punktach.

+0

Z trasy lub z kolekcji pól formularzy. – GalacticCowboy

+0

Kolekcja pól formularza przychodzi wraz z żądaniem, ale nie ma wpływu na to, jak ASP.Net MVC wymyśla rzeczy. Formularz jest wysyłany pod podany adres URL (zwykle do tego samego kontrolera, który wygenerował widok), a adres URL jest obsługiwany przez silnik routingu. – womp

1

Jest sporo kodu w grze na potrzeby kontrolera, akcji i rozdzielczości, a także modelBinders. Tak bardzo, że najlepiej będzie, jeśli przyjrzysz się konkretnym fragmentom struktury i poprosisz o bardziej szczegółowe pytanie, aby uzyskać dużą odpowiedź.

Na szczęście, ASP.NET MVC framework has been open-sourced, więc jeśli jesteś ciekawy, jak to wszystko działa, możesz get the code i przejrzeć go samodzielnie. Doskonały kod do przeczytania i na pewno się czegoś nauczysz.

Co ważniejsze, należy jednak przyjrzeć się klasom System.Web.Mvc.MvcHandler i System.Web.Mvc.ControllerActionInvoker, które powinny doprowadzić użytkownika do właściwej odpowiedzi.

Powiązane problemy