如何将数据传递给_Layout.cshtml

时间:2017-08-28 00:22:14

标签: c# asp.net-mvc asp.net-mvc-4 razor

在所有页面使用的_Layout.cshtml中,当选择任何背景图像时,我想显示所选图片。但是,遗憾的是,我不知道如何将这些数据传递给_Layout.cshtml。

AT _Layout.cshtml

<style type="text/css">
        #body-bg {
            background-image: url('//I want to change here');
        }
</style>

我该怎么办?从任何控制器,这些数据应传递给_Layout.cshtml,但如何?

1 个答案:

答案 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)

Pass data to layout that are common to all pages

Passing Data to a Layout Page