我正在尝试从我的布局中提取当前视图的名称。
通常,VirtualPath
用于此目的。不幸的是,这将返回布局文件的路径。
有没有办法获取控制器返回的View的名称?
答案 0 :(得分:8)
以下内容将为您提供视图名称:
((RazorView)ViewContext.View).ViewPath;
答案 1 :(得分:3)
您可以使用ViewBag。为其定义CurrentView
属性并使用它。
public ActionResult Create()
{
ViewBag.CurrentView = "Create";
return View();
}
在布局中,您可以像
一样阅读和使用它<h2>@ViewBag.CurrentView</h2>
或者如果你想把它变成一个变量
@{
var viewName = ViewBag.CurrentView;
}
如果您不希望显式设置viewbag属性名称,可以编写自定义操作过滤器来执行此操作。
public class TrackViewName : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
ViewResultBase view = filterContext.Result as ViewResultBase;
if (view != null)
{
string viewName =view.ViewName;
// If we did not explicitly specify the view name in View() method,
// it will be same as the action name. So let's get that.
if(String.IsNullOrEmpty(viewName))
{
viewName = filterContext.ActionDescriptor.ActionName;
}
view.ViewBag.CurrentView = viewName;
}
}
}
您需要使用我们的新动作过滤器
来装饰您的动作方法[TrackViewName]
public ActionResult Create()
{
return View();
}
答案 2 :(得分:1)
如果您使用MVC Core,您可以使用:
@System.IO.Path.GetFileNameWithoutExtension(ViewContext.View.Path)