2009-07-25 3 views
5

어떻게 컨트롤러에 메서드를 만들고 몇 가지 인수를 넣을 수 있으며 양식을 클릭 한 후 계산할 수 있습니까? 후드에서 어떻게 올바른 방법을 찾을 수 있습니까? 그리고 그 논증이 단지 필요하다는 것을 어떻게 알 수 있습니까? 간단히 말해서어떻게 asp.net mvc 알아낼 수 있나요?

답변

8

:

  1. 라우팅 엔진은 HttpRequest를 처리하고, 요청 된 URL을 확인합니다. 첫 번째 경로 일치를 찾으면 MvcRouteHandler의 새 인스턴스를 만들고 URL의 깨진 토큰을 RouteValueDictionary에 전달합니다.

  2. 경로의 MvcRouteHandler이 요청을 받아 컨트롤러 클래스 인스턴스를 인스턴스화하려고 시도합니다. 규약에 따라, "XXXXXXController"라는 클래스를 찾고, 여기서 X는 경로의 {controller} 매개 변수로 대체됩니다.

  3. 일단 컨트롤러를 찾으면 라우트의 {action} 매개 변수로 주어진 적절한 메소드를 호출합니다. 경로에 존재하는 {id}와 같은 모든 명명 된 인수는 매개 변수로 메소드에 전달됩니다.

기본적으로 ASP.Net MVC가 "알고있는"모든 것은 경로 정보에서옵니다. 얇은 공기에서 매개 변수를 구할 수는 없습니다. 매개 변수는 경로 구문 분석에서 가져와야합니다. 요청 된 URL에 정보가 없으면 메소드에 전달할 수 없습니다.

MvcRouteHandler 대신 경로에서 대체 핸들러를 사용하도록하여 프레임 워크의 동작을 재정의 할 수 있습니다. 프레임 워크는 확장 성이 뛰어나므로 많은 지점에서 사용자 정의 기능을 연결할 수 있습니다.

+0

경로 또는 양식 필드 콜렉션에서. – GalacticCowboy

+0

양식 필드 컬렉션은 요청과 함께 제공되지만 ASP.Net MVC가 상황을 파악하는 방법에는 영향을 미치지 않습니다. 양식은 지정된 URL (일반적으로보기를 생성 한 컨트롤러와 동일한 컨트롤러)에 게시되며 해당 URL은 라우팅 엔진에서 처리합니다. – womp

1

ModelBinders뿐 아니라 컨트롤러, 동작 및보기 해상도를위한 코드가 상당히 있습니다. 프레임 워크의 특정 부분을 살펴보고 더 많은 질문을 던져서 많은 답변을 얻는 것이 가장 좋습니다.

운 좋게도 ASP.NET MVC framework has been open-sourced입니다. 그렇다면 어떻게 작동하는지 궁금하다면 get the code으로 직접 살펴 보시기 바랍니다. 훌륭한 코드를 통해 읽을 수 있고 뭔가 배울 수 있습니다.

그러나 질문의 ​​요점은 질문에 답하기위한 올바른 길을 인도해야하는 System.Web.Mvc.MvcHandler 및 System.Web.Mvc.ControllerActionInvoker 클래스입니다.

관련 문제