首页 > 解决方案 > 与操作方法关联的视图名称可能不同

问题描述

我在看一本书,上面写着:

“如果 ViewResult 对象中没有指定视图名称,则将使用路由数据中的动作变量的值。对于大多数控制器,这意味着将使用方法的名称,以便关联默认视图文件Index 方法是 Index.cshtml。但是,如果您使用了 Route 属性,那么与操作方法关联的视图名称可能会有所不同。

但我做了一些测试,比如:

[Route("[controller]/MyAction")]
public ViewResult Index()
{
   string s = RouteData.Values["action"];
   return View();
}

所以 string s 是 "Index",和 action 方法名一样,那么与 action 方法关联的视图名怎么可能不同呢?

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

解决方案


对于 ViewName,它由ActionName.

作为属性路由

上面的路由模板没有定义动作、区域和控制器的路由参数。事实上,这些路由参数在属性路由中是不允许的。由于路由模板已经与动作相关联,因此从 URL 中解析动作名称是没有意义的。

Route Attribute 不会影响动作名称,也就不会影响视图选择。

如果您想通过操作名称更改视图名称,您可以ActionName尝试

[ActionName("TestViewAction")]
public IActionResult TestView()
{
    string view = RouteData.Values["action"].ToString();
    return View();
}

推荐阅读