最も強力な方法は、基本のviewmodelクラスを使用して、イメージのパスを保持する文字列プロパティを入れている:
モデルクラスを
public class BaseViewModel
{
public string BackgroundImage { get; set; }
}
_Layout.cshtml
@model BaseViewModel
<!DOCTYPE html>
<html>
<head>
<!-- other styles, meta tags, etc. -->
<style type="text/css">
#body-bg {
background-image: url('@Model.BackgroundImage');
}
</head>
<body>
<!-- body part -->
@RenderBody()
</body>
</html>
相対パスを使用している場合(例: ~/Images/Selected.png
)の代わりに、絶対パスの画像パスを参照するために、引数として文字列プロパティとUrlHelper.Content
を使用:
public class HomeController : Controller
{
// other stuff
return View(new BaseViewModel { BackgroundImage = "/path/to/image.png" });
}
NB:
#body-bg {
background-image: url('@Url.Content(Model.BackgroundImage)');
}
は、コントローラのアクションメソッド内のviewmodelの文字列プロパティを設定することを忘れないでください。あなたはViewBag
/ViewData
にModel
を変更することで、(これらは両方とも自動的に表示する渡されている)のviewmodel以外ViewBag
かViewData
を使用することができます。
ViewBag
は、動的であり、ViewBag
プロパティを使用するとNullReferenceException
がスローされるのを防ぐために追加のチェックが必要であることに注意してください。
参考文献:
Passing Data to Views (MS Documentation)
Pass data to layout that are common to all pages
Passing Data to a Layout Page
あなたがプロパティを含むベースビューモデルを使用して、またはあなたがそれを処理する方法に応じて 'ViewBag'または' ViewData' –
を使用して、それを渡すことができ、あなたにもあり、既定値でテンプレートを使用することができます。 (つまり、 '@RenderSection(...)') – axlj