2009-07-25 14 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クラスを参照する必要があります。これは、あなたの質問に答える正しいパスを導くはずです。

関連する問題