在ASP.net MVC3中将视图名称设置为操作属性

时间:2012-09-21 09:35:29

标签: c# asp.net-mvc asp.net-mvc-3

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

前:

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

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

1 个答案:

答案 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");
}

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