gpt4 book ai didi

c# - 如何将数据传递给 _Layout.cshtml

转载 作者:行者123 更新时间:2023-12-05 06:38:32 24 4
gpt4 key购买 nike

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" });
}

注意:您可以使用 ViewBagViewData 除了 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)

Pass data to layout that are common to all pages

Passing Data to a Layout Page

关于c# - 如何将数据传递给 _Layout.cshtml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45910448/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com