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
In poche parole:
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.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.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.
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.
- 1. Come funziona Url.Action Asp.net MVC?
- 2. Asp.Net MVC EnableClientValidation non funziona
- 3. Come funziona il metodo ASP.NET MVC UpdateModel()?
- 4. ASP.NET MVC FileStreamResult non funziona come previsto
- 5. Come funziona ViewBag in ASP.NET MVC
- 6. In ASP.NET MVC, come funziona response.redirect?
- 7. Come funziona il tag Authorize? - ASP.NET MVC
- 8. ASP.NET MVC - Tornando JavaScriptResult non funziona
- 9. ASP.NET MVC 3 JSONP: Funziona con JsonValueProviderFactory?
- 10. "Ricordami" con ASP.NET MVC L'autenticazione non funziona
- 11. executionTimeout non funziona su asp.net mvc
- 12. MVC ASP.NET MVC3 Attributo AllowHtml non funziona?
- 13. ASP.NET MVC 4 vista parziale non funziona
- 14. asp.net mvc PartialView @ Ajax.ActionLink non funziona
- 15. Vincolo percorso Non funziona per ASP.NET MVC
- 16. Come verificare ASP.NET MVC OutputCache funziona sul server?
- 17. ASP.NET MVC Autenticazione moduli - Come funziona e persiste l'autenticazione?
- 18. Asp.Net temi MVC, come?
- 19. ASP.NET MVC - Come reindirizzare sicuro?
- 20. ASP.NET Come funziona ViewState
- 21. In che modo funziona la convalida in ASP.NET MVC 2?
- 22. come bloccare un'azione asp.net mvc?
- 23. Asp.net mvc dataannotation La validazione MaxLength non funziona
- 24. NLog registro interno che non funziona con ASP.Net MVC
- 25. attributo ReadOnly non funziona nei modelli ASP.NET MVC
- 26. JavaScript funziona prima di inviare il modulo ASP.NET MVC
- 27. @ Html.HiddenFor non funziona negli elenchi in ASP.NET MVC
- 28. ASP.NET MVC HandleError non funziona (customErrors è impostato su "On")
- 29. ASP.NET MVC ritorno ViewResult
- 30. Asp.net MVC 2 caching
Dal percorso o dalla raccolta del campo modulo. – GalacticCowboy
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