Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 带有外部CSS文件的用户控件_Asp.net_Css_User Controls - Fatal编程技术网

Asp.net 带有外部CSS文件的用户控件

Asp.net 带有外部CSS文件的用户控件,asp.net,css,user-controls,Asp.net,Css,User Controls,我在Web应用程序的根目录中有一个ASCX用户控件。它引用了一个样式表,比如 <link type="text/css" rel="stylesheet" href="MyStyle.css" /> 问题是,如果位于应用程序子文件夹中的任何ASPX页面引用该用户控件,则它们看不到样式表,因为href path是相对的,并且样式表保留在应用程序根目录中 除了将CSS复制到所有子文件夹中,还有什么方法可以从根目录中普遍引用它吗?我可以引用外部JavaScript,使用ScriptM

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

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

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


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

您应该创建bundle.config文件,然后您可以在代码中使用它

实际上您有两个选项:

1-若要将其包含在主题文件夹中,asp.net framework将自动将其包含在使用此主题的所有页面中

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

public string basepath = "http://" + Request.Url.Authority + Request.ApplicationPath;
然后在ASP代码中使用它:

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

ResolveUrl将为您转换与应用程序相关的URL


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

代码隐藏

protected void Page_Load(object sender, EventArgs e)
{
    litStyle.Text = string.Format("<link href=\"{0}\" rel=\"stylesheet\" />", ResolveUrl("~/MyStyle.css"))
}
受保护的无效页面加载(对象发送方,事件参数e)
{
litStyle.Text=string.Format(“,ResolveUrl(~/MyStyle.css”))
}
加价

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

正如我在评论中提到的,我不想使用块。但我也不想在代码背后指定CSS文件的URL,所以我找到了一个折衷方案。我用
runat=“server”
属性和ASP.NET-style href声明
标记:

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

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

您能详细说明一下吗?我不喜欢使用
(这相当于Response.Write),因为它在许多情况下都会出现错误行为(例如,当用户控件位于UpdatePanel内时)如果您不想使用,那么您可以在ASCX控件的代码隐藏中使用ResolveUrl,并使用文字控件将其输出到页面。正如我在其他回答中提到的,我不喜欢使用
(这相当于Response.Write),因为在许多情况下(例如,当用户控件位于UpdatePanel内时),它可能会出现错误行为。你能详细介绍一下主题方法吗?在App_Themes文件夹中,你可以为web应用程序添加你自己的主题,这个主题包括CSS文件,一旦你将主题添加到你的页面,它会自动将这个文件夹中的所有CSS文件添加到你的页面。并使用正确的路径写入标记。非常感谢您分享此问题的解决方案。然而,我在这里有一个困惑,那就是,我知道我们将解析存储在项目子文件夹中的css路径。不过,
uc1.ascs.cs
将如何利用这个
xlinkCSS.Attri…
代码行-简而言之
css类
。希望你理解我的困惑。谢谢大家!@NikhilG不确定您的意思,但是CSS可以在您的应用程序中的任何位置,ASCX也可以。只要您使用上面的方法来指示CSS的相对路径,后端代码就可以将其解析为实际路径。
<link rel="stylesheet" type="text/css" runat="server" id="xlinkCSS" href="~/MyStyle.CSS" />
xlinkCSS.Attributes("href") = ResolveUrl(xlinkCSS.Attributes("href"))