Asp.net后台把脚本样式输出到head标签中节省代码冗
近期我投身于服务器控件的学习与开发,在此过程中,不可避免地需要为控件注册js和css等资源文件,或是直接注册纯脚本样式。我在这一过程中遇到了两大问题。
我发现我所注册的资源文件或纯脚本样式在生成的页面中并未出现在head标签内。这个问题看似令人困扰,实际上并不影响页面的功能运行。但在查看页面源代码时,可能会让源代码显得不够整洁,尤其当内容较多时,查找特定脚本会变得困难。至于是否有开发工具能在查看源代码时区分这些内容,我尚未得知。
当同一个页面使用多个相同控件时,会出现重复输入,即多余的代码。这是一个实实在在的问题,值得我们深入和解决。
为了解决这些问题,我决定采取一些措施。对于第一个问题,我选择了个人喜欢的解决方案,将资源注册改为后台直接使用。而对于第二个问题,我则决定在开发服务器控件时避免引用嵌入资源文件。这样改动后的代码如下:
以下是资源文件的注册方法:
```csharp
///
/// 注册资源文件
///
/// 资源文件路径
/// 资源文件标识,用于防止重复注册
/// 资源文件类型
public void RegisterResource(string path, string key, ResType type)
{
string resStr = string.Empty;
switch (type)
{
case ResType.Js:
resStr = string.Format("", path);
break;
case ResType.Css:
resStr = string.Format("", path);
break;
}
// 检查是否已经输出
if (!Page.ClientScript.IsClientScriptBlockRegistered(this.GetType(), key))
{
if (Page.Header != null)
{
LiteralControl link = new LiteralControl();
link.Text = "\r" + resStr;
Page.Header.Controls.Add(link); // 为页面Header控件增加自定义控件以达到预期效果
}
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), key, "", false); // 注册资源标识
}
}
```
在Web开发中,我们常常需要在页面实例中注册客户端脚本块,确保页面的功能和交互体验更加丰富多样。近期,我接触到了一个关于注册脚本块的代码片段,让我为你深入一下其中的奥妙。
`Page.ClientScript.IsClientScriptBlockRegistered(this.GetType(), key)` 这个方法非常重要,它用于检测当前页面实例中是否已经注册过指定的资源文件标识。通过这个方法,我们可以避免重复注册脚本块,确保页面的加载效率和性能。
接下来是 `Page.ClientScript.RegisterClientScriptBlock(this.GetType(), key, "", false)` 这个方法,它的作用就是在当前页面实例中注册该资源。虽然它的本意是注册一个脚本,但在这里的脚本内容实际上是空的。那么,这个方法的主要作用是什么呢?其实,它是为了注册一个标识(key),通过这个标识,我们可以管理和控制页面上的脚本块。
接下来,让我们看一下具体的代码实现。这段代码定义了一个名为 `RegisterScript` 的方法,它接受两个参数:一个是脚本块(或样式块)的内容,另一个是资源的标识(key)。通过 `IsClientScriptBlockRegistered` 方法检查该资源是否已经注册过。如果没有注册,那么就会进入方法体,将脚本块添加到页面的头部(Header)。通过 `RegisterClientScriptBlock` 方法注册资源的标识。
这个方法中的脚本块参数可以是 `", "dfed6");
}
```
其中,样式文件StyleSheet1.css的内容如下:
```css
body {}
div {
height:200px;
background-color:Blue
}
```
脚本文件JScript1.js的内容为:`alert('这是js文件里的脚本');`。页面的HTML代码大致如下:
```html