C# 向ASP.NET web控件(ascx)添加样式和脚本而不重复包含指令

C# 向ASP.NET web控件(ascx)添加样式和脚本而不重复包含指令,c#,javascript,asp.net,stylesheet,web-controls,C#,Javascript,Asp.net,Stylesheet,Web Controls,考虑开发一个web控件(ASP.NET)。你真正想做的是以一种非常好的方式设计和开发这个控件,这里有一个非常好的方法来做这件事(这就是我想做的,在这个问题中,我将进一步解释为什么我不能做这件事) 方案方法 1) 我在名为WebControls的单独文件夹中创建控件,并将其命名为(例如)MyWebControl。我将拥有以下文件:MyWebControl.ascx和MyWebControl.ascx.cs 2) 鉴于我的控件是一个复杂的控件,我将样式和动态客户端行为关联起来,在控件html中,引用

考虑开发一个web控件(ASP.NET)。你真正想做的是以一种非常好的方式设计和开发这个控件,这里有一个非常好的方法来做这件事(这就是我想做的,在这个问题中,我将进一步解释为什么我不能做这件事)

方案方法 1) 我在名为
WebControls
的单独文件夹中创建控件,并将其命名为(例如)
MyWebControl
。我将拥有以下文件:
MyWebControl.ascx
MyWebControl.ascx.cs

2) 鉴于我的控件是一个复杂的控件,我将样式和动态客户端行为关联起来,在控件html中,引用一个名为
MyWebControl.ascx.css
的css样式表和一个名为
MyWebControl.ascx.js
的javascript文件

3) 在我的控制下,我执行以下操作:

<%@ Control Language="C#" 
            AutoEventWireup="true" 
            CodeFile="MyWebControl.ascx.cs" 
            Inherits="MyApp.WebControls.MyWebControl" %>

<link href="MyWebControl.ascx.css" rel="stylesheet" type="text/css" />
<script src="MyWebControl.ascx.js" type="text/javascript"></script>

<div>
...
</div>

...
就是这样

问题 这件事有个问题:当我的控件被呈现,并且在一个页面中有我的多个控件时,我会得到指向css和js文件的链接,这些链接会被复制甚至重复多次

如何在我的控件中链接外部样式表/javascript文件,而不发生这种糟糕的事情

编辑 好的,在社区其他人的帮助下,我看了一眼之后,就明白了
Page.ClientScript
就是要拯救的

但是,要注册的脚本有很多功能。。。你能分辨出它们之间的区别吗

1)
Page.ClientScript.IsClientScriptBlockRegistered

2)
Page.ClientScript.isclientscriptinclude已注册

3)
Page.ClientScript.IsOnSubmitStatementRegistered

4)
Page.ClientScript.isstartupscript已注册

以及相应的集合方法

1)
Page.ClientScript.RegisterClientScriptBlock

2)
Page.ClientScript.RegisterClientScriptInclude

3)
Page.ClientScript.registerosubmitstatement

4)
Page.ClientScript.RegisterStartupScript

此外:这也可以应用于javascript和css吗


谢谢你一个想法:难道不能使用注入css文件导入吗

类似(未经测试):


你应该记得先用递归函数检查链接是否已经添加到
Page.Header.Controls-
Collection.

OK Tim,它已经过时了,需要使用Page.ClientScript,请查看我的编辑,因为我的问题现在变成了这个问题…@Tim:我没有尝试过。。。Visual Studio给了我一个关于过时元素用法的糟糕通知(哈哈:),但是我认为正确的方法是使用ClientScript来处理这些问题。不过,谢谢你,如果没有你,我就找不到问题编辑部分现在显示的元素。@Tim:它能与css和javascript一起工作吗????通过msdn,我找到了它,但您的描述要好得多,似乎只支持javascript。@正如我前面提到的,这只是一个想法。你试过了吗?但没用?@Tim:javascript可以用,但对CSS不好。。。好吧,似乎没有一个功能来苹果一个样式表并将其包含在页面中。。。。。
if(! Page.ClientScript.IsClientScriptBlockRegistered("MyWebControl.ascx.css"))
{
    Page.ClientScript.RegisterClientScriptBlock(this.getType(),"MyWebControl.ascx.css",@"<style type=""text/css"" src=""MyWebControl.ascx.css""></style>");
}
Dim objLink As New HtmlLink();
objLink.ID = "MyWebControlascxcss";
objLink.Attributes("rel") = "stylesheet";
objLink.Attributes("type") = "text/css";
objLink.Href ="~/filname.css";
Page.Header.Controls.Add(objLink);