2009-07-25 20 views
5

Come è possibile che io possa creare un metodo nel controller e solo inserire alcuni argomenti e lo calcola dopo aver fatto clic su un modulo di invio? Sotto il cofano, come trova il metodo giusto e come fa a capire che voglio solo quegli argomenti?Come funziona asp.net mvc?

risposta

8

In poche parole:

  1. Il motore di routing gestisce l'HttpRequest, e controlla l'URL richiesto. Quando trova la prima corrispondenza del percorso, crea una nuova istanza di MvcRouteHandler e passa i token dell'URL in un RouteValueDictionary.

  2. Il percorso MvcRouteHandler accetta la richiesta e tenta di creare un'istanza di un'istanza di classe del controllore. Per convenzione, cerca una classe chiamata "XXXXXXController", in cui le X vengono sostituite dal parametro {controller} nella rotta.

  3. Una volta trovato il controller, invoca il metodo appropriato su di esso, dato dal parametro {action} del percorso. Tutti gli argomenti con nome, come {id}, presenti nella route, vengono passati come parametri al metodo.

Fondamentalmente, tutto ciò che ASP.Net MVC "conosce" viene dalle informazioni sul percorso. Non può divinizzare i parametri dal nulla - devono provenire dall'analisi del percorso. Se l'informazione non è presente nell'URL richiesto, non può essere passata nel metodo.

Si noti inoltre che è possibile ignorare il comportamento del framework facendo in modo che i percorsi utilizzino gestori alternativi anziché MvcRouteHandler. Il framework è abbastanza estensibile, quindi è possibile collegare funzionalità personalizzate in molti punti.

+0

Dal percorso o dalla raccolta del campo modulo. – GalacticCowboy

+0

La raccolta del campo modulo viene fornita insieme alla richiesta, ma non influisce sul modo in cui ASP.Net MVC calcola le cose. Il modulo viene pubblicato su un determinato URL (in genere sullo stesso controller che ha generato la vista) e tale URL viene gestito dal motore di routing. – womp

1

C'è un bel po 'di codice in gioco per controller, azione e risoluzione della vista, così come i ModelBinders. Tanto è probabile che sia meglio per te esaminare le parti specifiche del framework e fare una domanda più dettagliata per ottenere molte risposte.

Fortunatamente, il ASP.NET MVC framework has been open-sourced, quindi se siete curiosi di sapere come funziona, potete get the code e guardarlo da soli. Il suo eccellente codice da leggere e tu sei sicuro di imparare qualcosa.

Più precisamente al punto della domanda, tuttavia, è necessario esaminare le classi System.Web.Mvc.MvcHandler e System.Web.Mvc.ControllerActionInvoker, che dovrebbero indirizzarti verso il percorso giusto per rispondere alle tue domande.

Problemi correlati