Razor 如何从当前CSHTML文件中检索视图以进行更智能的视图选择?

Razor 如何从当前CSHTML文件中检索视图以进行更智能的视图选择?,razor,asp.net-mvc-5,asp.net-mvc-partialview,Razor,Asp.net Mvc 5,Asp.net Mvc Partialview,假设我的视图/共享文件夹中有一个局部视图“\u Navbar.cshtml”,它在布局页面中被引用。。。所以它被嵌入到每一页中 现在,假设我的Views/ControllerX/Partial文件夹中存在一个同名的视图,该文件夹是特定于该视图的导航栏 在这种情况下,其他控制器中的视图可以找到共享的局部视图文件。但是,当我在ControllerX中运行视图时,Views/ControllerX/Partial中的_Navbar.cshtml文件最终会篡夺/覆盖Shared/Views中的文件 所以

假设我的视图/共享文件夹中有一个局部视图“\u Navbar.cshtml”,它在布局页面中被引用。。。所以它被嵌入到每一页中

现在,假设我的Views/ControllerX/Partial文件夹中存在一个同名的视图,该文件夹是特定于该视图的导航栏

在这种情况下,其他控制器中的视图可以找到共享的局部视图文件。但是,当我在ControllerX中运行视图时,Views/ControllerX/Partial中的_Navbar.cshtml文件最终会篡夺/覆盖Shared/Views中的文件

所以我想知道是否有一种方法可以根据当前正在执行的cshtml文件来选择视图。例如,如果从共享文件夹中的cshtml文件调用“Partial”,那么它应该更喜欢该文件夹中的其他部分视图,而不是更具体控制器视图位置中的部分视图


简言之,是否有一种方法来装配视图引擎,使其不具有静态搜索路径顺序,而是与上下文相关,并首先在与正在执行的cshtml文件相同的文件夹中查找文件?

如果必须,我将完全覆盖RazorViewEngine.FindPartialView方法,但为了编写此上下文智能,我需要知道哪个cshtml文件正在请求局部视图,这样它就可以先查找同级文件,然后查找控制器特定视图文件夹中的文件,依此类推。我认为这将是一个更好的默认行为。有人建议@VirtualPath将显示CSHTML文件的路径,但我不知道一旦控制流进入HtmlHelper.Partial调用,是否可以访问。VirtualPath是WebPageExecutingBase的成员,我不知道是否可以从部分处理程序中访问它。请看我在这里的回答:-这也应该适用于具有相同效果的_Layout.cshtml文件,这基本上是我正在做的。这是一个静态路由顺序,这意味着当ControllerX是操作的来源时,它总是在ControllerX/partial下找到部分视图,而不是共享视图,这对于布局来说是一个问题,当布局需要在Views/shared下具有相同名称的视图时。我不确定我是否完全理解您试图实现的目标。我非常确定,如果你像我提到的另一个线程那样设置它,那么它将首先查找/Views/{controller}/Partials/_Navbar.cshtml,如果找到它将返回该值,如果没有,它将移动到下一个搜索路径,最后查找/Views/Shared/_Navbar.cshtml-这是你想要的吗?