2009-07-25 41 views
5

我怎么能在控制器中创建一个方法,并且只需要输入一些参数,然后在点击一个表单提交之后就会计算出来呢?底下,它是如何找到正确的方法,以及它如何发现我只是想要这些论点?asp.net mvc怎么弄出来的?

回答

8

一言以蔽之:

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

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

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

基本上,ASP.Net MVC“知道”的一切都来自路由信息。它不能从稀薄的空气中获取参数 - 它们必须来自路径解析。如果信息不在请求的URL中,则不能传递给方法。

还应当指出的是,你可以通过你的路由覆盖框架的行为,请使用备用处理器,而不是MvcRouteHandler。该框架具有很强的可扩展性,因此您可以在许多地方插入自定义功能。

+0

从路线或表单字段集合。 – GalacticCowboy 2009-07-25 03:57:00

1

有在控制器,动作和视图解析,还有ModelBinders发挥相当多的代码。非常多的是,您最好能够查看框架的特定部分,并提出更详细的问题以获得更多答案。

幸运的是,ASP.NET MVC framework has been open-sourced,所以如果你很好奇它是如何工作的,你可以get the code自己看看。其优秀的代码阅读,你一定会学到一些东西。

更重要的是,您应该看看System.Web.Mvc.MvcHandler和System.Web.Mvc.ControllerActionInvoker类,它们应该引导您沿着正确的路径回答您的问题。