【问题标题】:Html.RenderAction with Route Name带有路由名称的 Html.RenderAction
【发布时间】:2015-05-21 19:42:35
【问题描述】:

我正在尝试在控制器操作中使用路由属性命名(例如:[Route(Name = "Abc123")]),并且同样能够通过Html.RenderAction 调用它,但似乎这不支持路由名称。我认为这是因为路由名称仅保留给通过 HTTP 请求而不是直接调用的路由名称,但对于 MVC 来说有点新,所以我不知所措。

我完全使用 MVC 属性路由,并且我没有配置其他路由。看来我必须定义路由名,路由名要匹配action方法名。但是,这样做时,当我尝试命名多个 Index 时,会遇到命名冲突。

我基本上是在尝试支持多个局部视图,每个局部视图都有自己的控制器,它们用作我网站上的插件/小部件。所以理想情况下,每个人都会有一个名为 Index 的操作。

您对我如何保持相同的命名有什么建议吗?这使我可以在不更改渲染名称的情况下调用Html.RenderAction("Index", [ControllerName], [Model])

【问题讨论】:

    标签: asp.net-mvc routes


    【解决方案1】:

    您可以将属性路由与 Html.RenderAction 一起使用,只需确保属性中的操作名称是实际名称:

     [Route("Home/About")]
        public ActionResult About()
        {
            ViewBag.Message = "Your application description page.";
    
            return View();
        }
    

    在 HTML 中你可以拥有

    @{Html.RenderAction("关于", "home");}

    它会正常工作的。

    【讨论】:

      【解决方案2】:

      您应该能够通过属性路由做您想做的事情。如果您尝试渲染局部视图,您应该使用 RenderPartial 而不是 RenderAction。

      您是否在区域之间这样做?我相信有一些问题可以使它正常工作。

      您能发布示例控制器代码和 RouteConfig 吗?

      【讨论】:

      • 请原谅我对 MVC 很陌生,所以这可能是一个愚蠢的问题。每个包含的插件(我正在使用 RenderAction 渲染)当前都有自己的控制器。这是基于其他人的建议,因此每个插件都可以独立生活并拥有自己的功能。这是正确的方法,还是对我正在做的事情有点矫枉过正?考虑到每个插件的行为类似于 PageFlakes/iGoogle/Netvibes 上的小部件某种东西,因此可能是日历、Twitter 提要、一些静态 HTML、RSS 提要等。
      • This post 非常模仿我想要做的事情,所以看起来 RenderAction 可能是正确的方法。那么,我遇到的问题是我是否可以以某种方式使用命名路由(或其他约定)来引用操作而不会出现任何命名冲突。
      • 如果每个插件都有它自己的控制器,就像你提到的那样,那么使用 RenderAction 应该没有问题。如果没有更多信息,很难说这是否矫枉过正,但无论哪种方式,您都可以在每个控制器中使用名为“索引”的不同操作
      猜你喜欢
      • 2015-07-07
      • 1970-01-01
      • 2015-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-16
      • 1970-01-01
      • 2021-12-04
      相关资源
      最近更新 更多