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 に答える