使用Razor为添加到模型中的每个类别添加不同的背景图像

时间:2011-10-22 21:25:54

标签: asp.net-mvc asp.net-mvc-3 razor nopcommerce

我有一个类别 - 我正在将它用于我的电子商务系统的模型,我为每个类别添加了固定的背景图像,我想要实现的是以编程方式为添加的每个类别添加不同的背景图像。下面是代码,目前我通过css添加图像。

@using Nop.Web.Models.Catalog;
@if (Model.Count > 0)
{
<div class="home-page-category-grid">
    @(Html.DataList<CategoryModel>(Model, 5,
            @<div class="item-box">
                <div class="category-item"> @*Thats where i am adding background-images in the class category-item*@
                    <h2 class="title">
                        <a href="@Url.RouteUrl("Category", new { categoryId = item.Id, SeName = item.SeName })" title="@item.PictureModel.Title">
                            @item.Name</a>
                    </h2>
                    <div class="picture">
                        <a href="@Url.RouteUrl("Category", new { categoryId = item.Id, SeName = item.SeName })" title="@item.PictureModel.Title">
                            <img style="border-width: 0px;" alt="@item.PictureModel.AlternateText" src="@item.PictureModel.ImageUrl"
                                title="@item.PictureModel.Title" /></a>
                    </div>
                </div>
            </div>
        ))
</div>
<div class="home-page-category-grid-separator"></div>

}

Css for Category -Item

.home-page-category-grid .category-item
{
text-align: center;
margin: 10px 0px 35px 4px; /*width: 150px;*/
width: 166px; 
height: 185px; 
background: url('images/picture-bg.png') no-repeat 0 100%;
}

任何建议或替代方案都将受到高度赞赏,我只需要为每个类别项目添加不同的背景图像,目前背景图像已固定在datalist使用的category-item类中。

3 个答案:

答案 0 :(得分:3)

如果您在视图中有样式表定义,而不是在css文件中,则可以执行此操作。 Css文件基本上是静态文件,如html。如果你想获得一些动态的东西,你必须在服务器端代码中执行它。也许混淆我所说的..但检查我的样本,你明白我的意思....我希望;)

// Your View
<style>
    body 
    {
        background-image: url('@ViewBag.ImagePath');
    }
</style>

// your action method
public ActionResult ActionName()
{
   ViewBag.ImagePath = "<path to your image">
   return View();
}

答案 1 :(得分:0)

我会使用多个CSS类,一个用于一般背景图像样式,然后是每个类别的一个,只有具有正确图像参考的特定背景图像样式。

类似的东西:

@using Nop.Web.Models.Catalog;
@if (Model.Count > 0)
{
<div class="home-page-category-grid">
    @(Html.DataList<CategoryModel>(Model, 5,
            @<div class="item-box">
                <div class="category-item category-@item.Id"> @*Thats where i am adding background-images in the class category-item*@
                    <h2 class="title">
                        <a href="@Url.RouteUrl("Category", new { categoryId = item.Id, SeName = item.SeName })" title="@item.PictureModel.Title">
                            @item.Name</a>
                    </h2>
                    <div class="picture">
                        <a href="@Url.RouteUrl("Category", new { categoryId = item.Id, SeName = item.SeName })" title="@item.PictureModel.Title">
                            <img style="border-width: 0px;" alt="@item.PictureModel.AlternateText" src="@item.PictureModel.ImageUrl"
                                title="@item.PictureModel.Title" /></a>
                    </div>
                </div>
            </div>
        ))
</div>
<div class="home-page-category-grid-separator"></div>

看看我如何将category-@item.Id添加到同一个类声明中?如果你有一个类别名称,你也可以使用更像语义的东西,等等。然后你可以在CSS中这样做:

.home-page-category-grid .category-item
{
    text-align: center;
    margin: 10px 0px 35px 4px; /*width: 150px;*/
    width: 166px; 
    height: 185px;
}

.home-page-category-grid .category-item .category-1
{
    background: url('images/picture-bg-1.png') no-repeat 0 100%;
}

.home-page-category-grid .category-item .category-2
{
    background: url('images/picture-bg-2.png') no-repeat 0 100%;
}

还有其他一些替代方案,特别是如果你在循环执行之前不知道图像网址...在这种情况下我只会使用style属性,其值为{{1} }。

答案 2 :(得分:0)

使用samandmoore的答案,您也可以在视图中完全执行此操作,使用基于请求的URL的图像源(使用@Request.RawUrl):

<div class="parallax bg-image-@Request.RawUrl.Replace('/', '-')" >
  <section class="page-title">
    <div class="container">
      <h2>@Html.Raw(ViewBag.Title)</h2>
    </div>
  </section>
</div>