代码之家  ›  专栏  ›  技术社区  ›  balexandre

在MVC2下动态编辑CSS文件的最佳选项

  •  0
  • balexandre  · 技术社区  · 14 年前

    我有一个应用程序,在管理区域中有一些选项,例如

    Background image: [ File Upload ]
    Top Illustration: [ File Upload ]
    

    在前端,我想很容易地将这些信息附加到CSS中,也许简单的方法应该是

    .background {
        background: url(<%: Model.BackgroundUrl %>);
        ...
    }
    

    我现在有我的CSS文件 ~/Content/Css

    我应该对此有一个视图并更改内容类型以便使用模型部件吗?

    还有什么其他的技术或者这种情况?

    谢谢您。

    2 回复  |  直到 14 年前
        1
  •  0
  •   Darin Dimitrov    14 年前

    不能在静态CSS文件中使用该模型。如果您想要实现这一点,您需要使用控制器操作动态地生成它。作为替代方案,您可以直接使用 img 标签:

    <img src="<%: Model.BackgroundUrl %>" alt="" />
    
        2
  •  0
  •   balexandre    14 年前

    最后我做了一个新的视图,并设置为:

    主模板

    <link href="<%= Url.Content(
                          String.Format("~/{0}/Css/CustomCss.aspx", 
                          ViewData["CalendarUrl"])) %>" 
          rel="stylesheet" type="text/css" />
    

    路线

    routes.MapRoute(
        "CustomCss", // Route name
        "{calurl}/Css/CustomCss.aspx", // URL with parameters
        new { calurl = "none", controller = "Content", action = "CustomCss", id = UrlParameter.Optional } // Parameter defaults
    );
    

    在控制器中: 内容 ,行动: 客户定制系统

    // GET: /Css/CustomCss
    public ActionResult CustomCss(string calurl)
    {
        return View();
    }
    

    在我的 视图 (置于 共享 ):

    <%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" 
             ContentType="text/css" %>
    <%
        string company_logo = ViewData["CompanyLogo"] as string;
        string company_bkg = ViewData["CompanyBackground"] as string;
    %>
    .background {
    <%if (!String.IsNullOrWhiteSpace(company_bkg))
      { %>background-image:url('<%: company_bkg %>');<%} %>
    }
    #header-content{
    <%if (!String.IsNullOrWhiteSpace(company_logo ))
      { %>background-image:url('<%: company_logo %>');<%} %>
    }