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

有帮助吗?

解决方案

简而言之:

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

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

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

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

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

其他提示

有用于控制器,动作和视图的分辨率,以及所述ModelBinders发挥相当多的代码。与其说它很可能是最适合你寻找到框架的特定部分,并要求更详细的问题得到太多的答案。

幸运的是, ASP.NET MVC框架已经开源,所以如果你是好奇,它是如何工作,你可以得到的代码并通过它来看一下吧。其出色的代码通读和你一定能学到一些东西。

更多你的问题的地步,但是,你应该看看System.Web.Mvc.MvcHandler和System.Web.Mvc.ControllerActionInvoker类,这将导致你失望的回答你的问题的正确道路。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top