最近在學(xué)習(xí)開發(fā)服務(wù)器控件,其它就少不了為控件注冊js和css之類的資源文件,或者直接注冊純腳本樣式。其中就遇到如下問題:
1、 注冊的資源文件或純腳本樣式在生成的頁面中都不在head標(biāo)簽中(當(dāng)然這個(gè)不影響頁面功能)
2、 一個(gè)頁面使用多個(gè)一樣的控件時(shí),會(huì)出現(xiàn)重復(fù)輸入(出現(xiàn)多余代碼)
第一個(gè)問題說到底也不是什么問題,主要是看個(gè)人喜歡。在瀏覽器里查看頁面源代碼時(shí),也許就成了問題了,源代碼很不整潔,要是內(nèi)容多時(shí)問題就更突出。本來想找腳本,卻在head標(biāo)簽里找不到,只能到其它標(biāo)簽里找了。(不知道有沒有哪些開發(fā)工具在查看源代碼時(shí)可以把它們都區(qū)分開來,以方便查找)
第二個(gè)卻實(shí)是個(gè)問題,也不多說了。
有問題就應(yīng)該解決,為了方便看效果,把它改成了后臺(tái)直接使用,開發(fā)服務(wù)器控件時(shí)也使用,只是不用引用嵌入資源文件。
代碼如下,兩個(gè)方法:
復(fù)制代碼 代碼如下:
注冊資源文件
/// summary>
/// 注冊資源文件
/// /summary>
/// param name="path">路徑/param>
/// param name="key">要搜索的客戶端資源的鍵,防止/param>
/// param name="type">資源文件類型/param>
public void RegisterResource(string path, string key, ResType type)
{
string resStr = string.Empty;
switch (type)
{
case ResType.Js:
resStr = string.Format("script type=\"text/javascript\" language=\"javascript\" src=\"{0}\">/script>", path);
break;
case ResType.Css:
resStr = string.Format("link href=\"{0}\" rel=\"stylesheet\" type=\"text/css\" />", path);
break;
}
//是否已輸出
if (!Page.ClientScript.IsClientScriptBlockRegistered(this.GetType(), key))
{
if (Page.Header != null)
{
LiteralControl link = new LiteralControl();
link.Text = "\r\n" + resStr;
Page.Header.Controls.Add(link);
}
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), key, "", false);//注冊資源key
}
}
此方法有三個(gè)參數(shù),第一個(gè)path是資源文件路徑;第二個(gè)key是資源文件標(biāo)識(shí),用來防止重復(fù)注冊;第三個(gè)type,枚舉類型,樣式和腳本兩類。方法也很簡單,通過為頁面Header控件增加自己定義控件以達(dá)到想要的效果。Page.ClientScript.IsClientScriptBlockRegistered(this.GetType(), key)用來檢測當(dāng)前頁面實(shí)例中此資源文件標(biāo)識(shí)是否已經(jīng)注冊過,Page.ClientScript.RegisterClientScriptBlock(this.GetType(), key, "", false)這個(gè)不可少,此作用就是在當(dāng)前頁面實(shí)例中注冊該資源,其本來之意是注冊一個(gè)腳本,但此處的腳本為空。
復(fù)制代碼 代碼如下:
注冊腳本塊(或者樣式塊)
/// summary>
/// 注冊腳本塊(或者樣式塊)
/// /summary>
/// param name="script">/param>
/// param name="key">/param>
/// param name="type">/param>
public void RegisterScript(string script, string key)
{
//是否已輸出
if (!Page.ClientScript.IsClientScriptBlockRegistered(this.GetType(), key))
{
if (Page.Header != null)
{
LiteralControl link = new LiteralControl();
link.Text = "\r\n" + script;
Page.Header.Controls.Add(link);
}
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), key, "", false);//注冊資源key
}
}
此方法有二個(gè)參數(shù),第一個(gè)script 是腳本塊(或者樣式塊),如script>******/script>或都style>/style>之類。方法體和上面的差不多,在此就不講了。
如何使用
此例在Page_Load方法里使用
復(fù)制代碼 代碼如下:
protected void Page_Load(object sender, EventArgs e)
{
this.RegisterResource("css/StyleSheet1.css", "dfed", ResType.Css);
this.RegisterResource("Scripts/JScript1.js", "dfed4", ResType.Js);
this.RegisterScript("script>alert('直接用script腳本輸入')/script>", "dfed6");
}
樣式文件:
StyleSheet1.css
復(fù)制代碼 代碼如下:
body {
}
div { height:200px; background-color:Blue}
腳本文件:
JScript1.js
復(fù)制代碼 代碼如下:
alert('這是js文件里的腳本');
頁面:
html
復(fù)制代碼 代碼如下:
!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
html xmlns="http://www.w3.org/1999/xhtml">
head runat="server">
title>/title>
/head>
body>
form id="form1" runat="server">
div>
/div>
/form>
/body>
/html>
您可能感興趣的文章:- Visual Studio 2017下ASP.NET CORE的TagHelper智能提示解決辦法
- NET Core TagHelper實(shí)現(xiàn)分頁標(biāo)簽
- 解讀ASP.NET 5 & MVC6系列教程(13):TagHelper
- asp.net正則表達(dá)式刪除指定的HTML標(biāo)簽的代碼
- asp.net 過濾圖片標(biāo)簽的正則
- asp.net core新特性之TagHelper標(biāo)簽助手