Asp.net mvc MVC通过当前测试的目的是什么;控制员;及;行动“;作为参数值

Asp.net mvc MVC通过当前测试的目的是什么;控制员;及;行动“;作为参数值,asp.net-mvc,razor,Asp.net Mvc,Razor,我必须通过我的操作链接传递一个额外的参数来指示它们的来源(因为我需要相应地更改页面中的反向链接) 由于它是一个控制器名称,我决定将其命名为controller e、 g.示例链接可能是: @Html.ActionLink(item.Name, "Options", "Questionnaire", new { id = item.QuestionnaireId, controller = "templates" }, null) QuestionnaireControl

我必须通过我的操作链接传递一个额外的参数来指示它们的来源(因为我需要相应地更改页面中的反向链接)

由于它是一个控制器名称,我决定将其命名为
controller

e、 g.示例链接可能是:

@Html.ActionLink(item.Name, "Options", "Questionnaire", new { 
     id = item.QuestionnaireId, 
     controller = "templates" }, null)
QuestionnaireController
中的接收操作如下所示:

public ActionResult Options(int id, string controller)
当操作被点击时,我注意到控制器值不是
模板
,而是当前控制器的名称(即
问题控制器

作为一个实验,我添加了一个
动作
参数,例如:

public ActionResult Options(int id, string controller, string action)
操作值也是当前操作(即
选项

我的解决方法是将我的参数重命名为
source
,但是为什么MVC要麻烦地将名称
controller
action
映射到action参数?
我假设这将应用于任何/所有路由映射值,但这是为了什么

为什么MVC要麻烦地将控制器和操作的名称映射到操作参数

我相信它是作为或其他价值提供者(可能是)的一部分完成的。Net MVC使用,因此框架使用提供的值来填充方法参数。控制器名称、操作名称甚至区域名称都是Url中提供的值

我假设这适用于任何/所有路由映射值,但这是为了什么

ValueProvider用于路由数据以确定要使用的匹配路由,它也恰好是提供数据以填充方法参数的同一对象。您正在经历的副作用很可能不是他们试图实现的功能

使用ValueProviders定位值并将其绑定到模型(或方法参数)