asp.net mvc如何解决这个问题?

时间:2009-07-25 03:46:51

标签: asp.net asp.net-mvc routing asp.net-routing

我怎么能在控制器中创建一个方法,只是放一些参数,然后在点击表单提交后就把它弄清楚了?在引擎盖下,它是如何找到正确的方法以及如何确定我只是想要这些参数?

2 个答案:

答案 0 :(得分:8)

简而言之:

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

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

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

  4. 基本上,ASP.Net MVC“知道”的所有内容都来自路由信息。它无法从稀薄的空气中划分参数 - 它们必须来自路径解析。如果请求的URL中不存在该信息,则无法将其传递给该方法。

    还应该注意,您可以通过使路由使用备用处理程序而不是MvcRouteHandler来覆盖框架的行为。该框架具有很强的可扩展性,因此您可以在许多方面插入自定义功能。

答案 1 :(得分:1)

对于控制器,动作和视图分辨率以及ModelBinder,有相当多的代码。这么多,你可能最好调查框架的特定部分,并提出更详细的问题来获得大量答案。

幸运的是ASP.NET MVC framework has been open-sourced,所以如果你对它的运作方式感到好奇,你可以get the code自己查看。它的优秀代码可以通读,您一定会学到一些东西。

然而,更重要的是,你应该查看System.Web.Mvc.MvcHandler和System.Web.Mvc.ControllerActionInvoker类,它们应该引导你走正确的道路来回答你的问题。