在所有页面使用的_Layout.cshtml中,当选择任何背景图像时,我想显示所选图片。但是,遗憾的是,我不知道如何将这些数据传递给_Layout.cshtml。
AT _Layout.cshtml
<style type="text/css">
#body-bg {
background-image: url('//I want to change here');
}
</style>
我该怎么办?从任何控制器,这些数据应传递给_Layout.cshtml,但如何?
答案 0 :(得分:-1)
最强大的方法是使用基本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
作为参数:
#body-bg {
background-image: url('@Url.Content(Model.BackgroundImage)');
}
另外不要忘记在控制器操作方法中设置viewmodel的字符串属性:
public class HomeController : Controller
{
// other stuff
return View(new BaseViewModel { BackgroundImage = "/path/to/image.png" });
}
注意:您可以将ViewBag
改为ViewData
/ {{1 }}:
Model
请注意,ViewBag
是动态的,可能需要额外检查以防止在使用ViewData
属性时引发// View (CSS)
#body-bg {
background-image: url('@ViewBag.BackgroundImage');
}
// Controller
public class HomeController : Controller
{
// other stuff
ViewBag.BackgroundImage = "/path/to/image.png";
return View();
}
。
参考文献:
Passing Data to Views (MS Documentation)