MVC传递当前"控制器"的目的是什么?和"行动"作为参数值

时间:2015-05-29 23:16:05

标签: asp.net-mvc razor

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

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

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

@Html.ActionLink(item.Name, "Options", "Questionnaire", new { 
     id = item.QuestionnaireId, 
     controller = "templates" }, null)

QuestionnaireController中的接收操作如下:

public ActionResult Options(int id, string controller)

当操作被点击时,我注意到控制器值不是template,而是当前控制器的名称(即QuestionnaireController)。

作为实验,我添加了action参数,例如:

public ActionResult Options(int id, string controller, string action)

行动价值也是当前行动(即Options)。

我的解决方法就是将我的参数重命名为source,但是为什么MVC会将名称controlleraction映射到动作参数?< / strong>我认为这适用于任何/所有路由映射值,但这是什么目的?

1 个答案:

答案 0 :(得分:1)

  

为什么MVC需要将名称控制器和操作映射到操作参数?

我相信它是QueryStringValueProvider或其他一个ValueProviders(也许是RouteDataValueProvider)的一部分。 ASP.Net MVC使用Convention over Configuration,因此框架使用提供的值来填充方法参数。控制器名称,操作名称甚至区域名称都是URL中提供的值。

  

我认为这适用于任何/所有路由映射值,但这是什么目的?

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

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