Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在asp.net MVC 3中获取当前视图名称?_Asp.net_Asp.net Mvc 3_Razor - Fatal编程技术网

如何在asp.net MVC 3中获取当前视图名称?

如何在asp.net MVC 3中获取当前视图名称?,asp.net,asp.net-mvc-3,razor,Asp.net,Asp.net Mvc 3,Razor,在asp.net MVC 3中,如何使用Razor engine获取与当前URL相关的当前视图名称?不知道为什么需要获取当前视图名称,但可以在视图中使用VirtualPath属性。通常,了解当前操作或控制器更有用。但无论如何,以下是获取当前视图名称的方法: @VirtualPath 如果您只想获取文件名: @Path.GetFileName(Server.MapPath(VirtualPath)) 在不延长期限的情况下: @Path.GetFileNameWithoutExtension(S

在asp.net MVC 3中,如何使用Razor engine获取与当前URL相关的当前视图名称?

不知道为什么需要获取当前视图名称,但可以在视图中使用
VirtualPath
属性。通常,了解当前操作或控制器更有用。但无论如何,以下是获取当前视图名称的方法:

@VirtualPath
如果您只想获取文件名:

@Path.GetFileName(Server.MapPath(VirtualPath))
在不延长期限的情况下:

@Path.GetFileNameWithoutExtension(Server.MapPath(VirtualPath))

您可以从RequestContext.RouteData获得它 具体来说,其值集合包含“控制器”和“操作”键 即 RequestContext.RouteData.Values[“controller”]
RequestContext.RouteData.Values[“action”]

我也测试了这段代码,我可以用它做点什么。 但是,我不确定这是否是一个好的解决方案

例如,我需要检测主目录中的Contacts视图。于是我写道:

if (@Request.RawUrl == "/Home/Contacts")
{
   // do something
}

ASP.NET核心的等效版本:

@ViewContext.ExecutingFilePath
输出如下:

/Views/Shared/String.cshtml
视图的渲染可能涉及一个或多个文件(例如_ViewStart、Layouts等)。 此属性包含当前正在渲染的文件的路径


+1这很好用-这应该是公认的答案。顺便说一句,我在没有映射路径的情况下进行了尝试,效果也一样。一般来说,
路径
应该与相对路径一致。有什么我遗漏的吗?@VirtualPath可以用来做的一件非常有用的事情-一个从数据源查找该视图本地化的键。也许这不是最好的方法,但我喜欢为每个视图创建一个.js和.css。然后,我希望在视图中包含这两个元素,对于这两个元素,拥有视图的名称是最有用的。因此,感谢您的回复。您可以根据视图添加一个body类,该类具有相同的操作/控制器,在某些情况下非常有用。您知道如何获得实际的视图文件名吗?如果在布局中显示,VirtualPath将显示布局文件的名称,而不是使用布局的实际视图。对于那些提问的人,在开发过程中显示控制器类、动作和视图文件非常好,这样你就知道如何快速访问某个视图/控制器。不,这将得到动作名称。操作名称不一定与特定的视图名称严格相关。您会发现这种情况经常出现,因此非常有用。您可能需要使用HttpContext.Current.Request.RequestContext.RoutedData.Values[“action”]对其进行限定。我将其放在_ViewStart中,它总是返回“Views/_ViewStart.cshtml”