C# 向ASP.NET web控件(ascx)添加样式和脚本而不重复包含指令
考虑开发一个web控件(ASP.NET)。你真正想做的是以一种非常好的方式设计和开发这个控件,这里有一个非常好的方法来做这件事(这就是我想做的,在这个问题中,我将进一步解释为什么我不能做这件事) 方案方法 1) 我在名为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中,引用
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);