5

我怎么能在控制器中创建一个方法并只输入一些参数,然后在我单击表单提交后它会计算出来?在幕后,它如何找到正确的方法以及它如何确定我只想要这些论点?

4

2 回答 2

8

简而言之:

  1. 路由引擎处理 HttpRequest,并检查请求的 URL。当它找到第一个路由匹配时,它会创建一个新实例MvcRouteHandler并将 URL 的分解标记传递给 RouteValueDictionary。

  2. 路由MvcRouteHandler接受请求,并尝试实例化控制器类实例。按照惯例,它会查找一个名为“XXXXXXController”的类,其中 X 被路由中的 {controller} 参数替换。

  3. 一旦找到控制器,它就会调用路由的 {action} 参数给出的适当方法。路由中存在的任何命名参数,例如 {id},都作为参数传递给方法。

基本上,ASP.Net MVC “知道”的一切都来自路由信息。它无法凭空判断参数 - 它们必须来自路由解析。如果请求的 URL 中不存在信息,则无法将其传递到方法中。

还应该注意的是,您可以通过使您的路由使用备用处理程序而不是MvcRouteHandler. 该框架非常可扩展,因此您可以在很多地方插入自定义功能。

于 2009-07-25T03:52:37.070 回答
1

控制器、动作和视图分辨率以及 ModelBinders 有相当多的代码在起作用。如此之多,您最好查看框架的特定部分并提出更详细的问题以获得大部分答案。

幸运的是,ASP.NET MVC 框架已经开源,所以如果您对它的工作原理感到好奇,您可以获取代码并自己查看。其优秀的代码可以通读,你一定会学到一些东西。

但是,更重要的是,您应该查看 System.Web.Mvc.MvcHandler 和 System.Web.Mvc.ControllerActionInvoker 类,它们应该会引导您找到正确的路径来回答您的问题。

于 2009-07-25T03:56:36.267 回答