1

有没有办法将视图文件名设置为 Action 之上的属性?

前任:

[ViewName("~/Views/CustomerInformation.cshtml")]
public ActionResult ViewCustomers()
{
    // 
}

目的是在运行时动态更改视图文件。

4

1 回答 1

3

当然,您可以覆盖该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");
}

您似乎没有为框架已经提供的自定义操作过滤器带来太多价值。

于 2012-09-21T09:37:09.810 回答