- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
At _Layout.cshtml used by all pages, when any background image is selected, I want to display the selected picture.但是,不幸的是,我不知道如何将此数据传递给 _Layout.cshtml。
AT_Layout.cshtml
<style type="text/css">
#body-bg {
background-image: url('//I want to change here');
}
</style>
我该怎么办?从任何 Controller ,此数据都应传递给 _Layout.cshtml,但如何传递?
最佳答案
最稳健的方法是使用基本 View 模型类并放置一个字符串属性来保存图像路径:
模型类
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)');
}
也不要忘记在 Controller 操作方法中设置 View 模型的字符串属性:
public class HomeController : Controller
{
// other stuff
return View(new BaseViewModel { BackgroundImage = "/path/to/image.png" });
}
注意:您可以使用 ViewBag
或 ViewData
除了 View 模型(它们都自动传递给 View ),方法是将 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();
}
请注意 ViewBag
是动态的,可能需要额外检查以防止在使用 ViewBag
属性时抛出 NullReferenceException
。
引用资料:
Passing Data to Views (MS Documentation)
关于c# - 如何将数据传递给 _Layout.cshtml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45910448/
我是一名优秀的程序员,十分优秀!