有没有办法将视图文件名设置为Action之上的属性?
前:
[ViewName("~/Views/CustomerInformation.cshtml")]
public ActionResult ViewCustomers()
{
//
}
目的是在运行时动态更改视图文件。
答案 0 :(得分:2)
当然,您可以覆盖OnActionExecuted
方法并替换操作过滤器中指定的原始视图名称:
public class ViewNameAttribute : ActionFilterAttribute
{
private readonly string _viewName;
public ViewNameAttribute(string viewName)
{
_viewName = viewName;
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
var result = filterContext.Result as ViewResultBase;
if (result != null)
{
result.ViewName = _viewName;
}
}
}
然后你可以返回一个虚拟视图:
[ViewName("~/Views/CustomerInformation.cshtml")]
public ActionResult ViewCustomers()
{
return View();
}
但是我想知道你可以直接写的自定义动作过滤器的实际应用是什么:
public ActionResult ViewCustomers()
{
return View("~/Views/CustomerInformation.cshtml");
}
您似乎没有为此框架已提供的自定义操作过滤器带来太多价值。