ASP.NET Core MVC - ビューを相対パスで指定する

ASP.NET Core MVCではビュー名を指定してビューを探すと思いますが、ビュー名だけでなくて相対パスも指定できますよというメモ。

相対パス~/ではじまる文字列です。

Controller.Viewメソッドの引数viewName

ViewResultを生成するメソッドですね。このメソッドの引数viewNameに相対パスを指定できます。

// サンプルコントローラ
public class SampleController : Controller {
    public IActionResult Index() {
        // 引数に相対パスを指定できる
        return View("~/Views/Sample/Index.cshtml");
    }
}

部分ビューのタグヘルパーPartialTagHelperのname属性

PartialTagHelperはASP.NET Core 2.1で追加されました。部分ビューをレンダリングするタグヘルパーです。

name属性に相対パスを指定できます。

@* name属性に相対パスを指定できる *@
<partial name="~/Views/Sample/_Partial.cshtml" />

ViewComponent.Viewメソッドの引数viewName

ViewViewComponentResultを生成するメソッドの引数viewNameも相対パスを指定できます。

// サンプルビューコンポーネント
public class SampleViewComponent : ViewComponent {
    private Task ActionAsync() => Task.CompletedTask;

    public async Task<IViewComponentResult> InvokeAsync() {
        // なにかの処理
        await ActionAsync();

        // 引数に相対パスを指定できる
        return View("~/Views/Components/Sample/Default.cshtml");
    }
}

部分ビューやビューコンポーネントをSharedフォルダに置くのはちょっと気が引けるけど、いくつかのビューで使い回ししたいときがありましたが、そんなときに相対パスを使うのもありかなと。ケースバイケースでしょうが。