【问题标题】:User Control with external CSS file使用外部 CSS 文件进行用户控制
【发布时间】:2013-09-03 01:06:49
【问题描述】:

我的 Web 应用程序的根目录中有一个 ASCX 用户控件。它引用了一个样式表,类似于

<link type="text/css" rel="stylesheet" href="MyStyle.css" />

问题是,如果位于应用程序子文件夹中的任何 ASPX 页面引用了该用户控件 - 他们看不到样式表,因为 href 路径是相对的,并且样式表保留在应用程序根目录中。

除了将 CSS 复制到所有子文件夹中之外,还有其他方法可以从根目录普遍引用它吗?我引用外部 JavaScript 没有问题,使用 ScriptManagerProxy 我可以通过 ASP.NET“~/”表示法指定外部 JS 文件的路径,该符号从任何位置解析为真实路径。 CSS 是否存在类似的东西?

【问题讨论】:

    标签: asp.net css user-controls


    【解决方案1】:

    ResolveUrl 将为您转换应用程序相关的 url。 http://msdn.microsoft.com/en-us/library/system.web.ui.control.resolveurl.aspx

    <link href="<%= ResolveUrl("~/MyStyle.css") %>" rel="stylesheet" />
    

    编辑:如果您不想使用内联代码块

    代码隐藏

    protected void Page_Load(object sender, EventArgs e)
    {
        litStyle.Text = string.Format("<link href=\"{0}\" rel=\"stylesheet\" />", ResolveUrl("~/MyStyle.css"))
    }
    

    标记

    <asp:Literal ID="litStyle" runat="server"/>
    

    【讨论】:

    • 我不喜欢使用 &lt;%= %&gt;(相当于 Response.Write),因为它在很多情况下都会出现问题(例如,当用户控件位于 UpdatePanel 中时)
    • 如果您不想使用 ,那么您可以在 ASCX 控件的代码隐藏中使用 ResolveUrl,并使用文字控件将其输出到页面。跨度>
    【解决方案2】:

    正如我在 cmets 中提到的,我不想使用 块。但是我也不想在代码隐藏中分配 CSS 文件的 URL,所以我找到了一个折衷方案。我用runat="server" 属性和ASP.NET 声明&lt;link&gt; 标记 - 样式href:

    <link rel="stylesheet" type="text/css" runat="server" id="xlinkCSS" href="~/MyStyle.CSS" />
    

    然后在代码隐藏中简单地解析该链接

    xlinkCSS.Attributes("href") = ResolveUrl(xlinkCSS.Attributes("href"))
    

    使用这种方法,我最终可以创建一个接受页面作为参数的函数,循环遍历所有“链接”标签,解析它们的 URL。

    【讨论】:

    • 先生,非常感谢您分享解决此问题的方法。但是我在这里有一个困惑,我知道我们将解决存储在项目子文件夹中的 css 路径。不过,uc1.ascs.cs 将如何利用这行代码 xlinkCSS.Attri... - 简而言之 css classes。希望你能理解我的困惑。谢谢!
    • @NikhilG 不确定您的意思,但 CSS 可以在您的应用程序中的任何位置,ASCX 也可以。只要您使用上述方法来指示 CSS 的相对路径 - 后端代码就可以将其解析为真实路径。
    【解决方案3】:

    其实你有两种选择:

    1- 将其包含在您的主题文件夹中,然后asp.net框架将自动将其包含在使用此主题的所有页面中

    2- 在您的 CS 代码中添加一个包含路径的公共变量,然后在您的代码中使用它,如下代码:

    public string basepath = "http://" + Request.Url.Authority + Request.ApplicationPath;
    

    然后在 ASP 代码中使用它:

    <link type="text/css" rel="stylesheet" href="<%=basepath %>MyStyle.css" />
    

    【讨论】:

    • 正如我在其他答案中提到的那样,我不喜欢使用 &lt;%= %&gt;(相当于 Response.Write),因为它在许多情况下可能会出现异常(例如,当用户控件位于 UpdatePanel 中时)。您能否详细说明主题方法?
    • 在 App_Themes 文件夹中,您可以为 Web 应用程序添加自己的主题,该主题包含 CSS 文件,一旦您将主题添加到页面,它会自动将此文件夹中的所有 CSS 文件添加到您的页。并用正确的路径写入 标签
    【解决方案4】:

    你应该制作 bundle.config 文件,然后你可以在你的代码中使用它

    【讨论】:

    • 你能详细说明一下吗?
    猜你喜欢
    • 2011-12-12
    • 1970-01-01
    • 2018-07-03
    • 2020-05-25
    • 2011-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多