asp.net-mvc - ASP.NET MVC : get "Main-Controller" in RenderAction

标签 asp.net-mvc routing

如何在 RenderAction 中获得实际的“主 Controller ”?

例子:

我的路线:

{controller}/{action}

我的网址是:
页面/某个 Action
旅游/一些 Action
...

在我的 Site.Master 中,我做了一个 RenderAction:
<% Html.RenderAction("Index", "BreadCrumb"); %>

我的 BreadCrumbController Action 如下所示:
public ActionResult Index(string controller)
{

}

字符串 Controller 包含“BreadCrumb”(这是可以理解的,因为实际上我在 BreadCrumbController 中)。

获得“真实” Controller (例如页面或游览)的最佳方式是什么。

最佳答案

父 View / Controller 上下文

如果您使用 MVC 2 RC(不知道以前的版本),您可以通过 View 的上下文访问父 Controller ,在那里您将找到一个名为:

ViewContext ParentActionViewContext;

这是父 View 的上下文,并且还引用了启动 View 渲染的 Controller ...

路由

在我看来(从你的问题)你有任意数量的路由段的请求......在这种情况下,你有两个选择:
  • 使用贪婪参数定义您的路线,其中 actions在这种情况下,将捕获请求 URL 中的所有操作
    {controller}/{*actions}
    
  • 创建自定义 Route将处理您的自定义路由要求并填充 RouteData 的类如所须。

  • 第二个需要更多的工作和路由知识,但它将帮助您获得更多有关 Asp.net MVC 路由的知识。我过去做过,这是一个宝贵的教训。也是一种处理我的自定义路线要求的优雅方式。

    关于asp.net-mvc - ASP.NET MVC : get "Main-Controller" in RenderAction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/867649/

    相关文章:

    asp.net-mvc - ASP.MVC : Implementing a non-templated view engine?

    asp.net-mvc - MVC 5 - 将 WebPack 输出包含到发布中

    asp.net-mvc - 无法加载文件或程序集 Oracle.DataAccess

    wcf - 获取 IRequestReplyRouter 与服务契约(Contract)不匹配或没有有效的方法契约(Contract)错误?

    Angular 4 Routing 不适用于实时网络应用程序

    go - 如何从 gorilla mux.Router过滤一些路径

    javascript - 将 MVC 局部 View 嵌入到 document.write JS 调用中

    javascript - 动态文本框的标签索引

    ruby-on-rails - 没有路由匹配 service-worker.js

    c - 使用路由套接字需要安装什么包?