Asp.net后臺(tái)把腳本樣式輸出到head標(biāo)簽中節(jié)省代碼冗余
最近在學(xué)習(xí)開(kāi)發(fā)服務(wù)器控件,其它就少不了為控件注冊(cè)js和css之類(lèi)的資源文件,或者直接注冊(cè)純腳本樣式。其中就遇到如下問(wèn)題:
1、 注冊(cè)的資源文件或純腳本樣式在生成的頁(yè)面中都不在head標(biāo)簽中(當(dāng)然這個(gè)不影響頁(yè)面功能)
2、 一個(gè)頁(yè)面使用多個(gè)一樣的控件時(shí),會(huì)出現(xiàn)重復(fù)輸入(出現(xiàn)多余代碼)
第一個(gè)問(wèn)題說(shuō)到底也不是什么問(wèn)題,主要是看個(gè)人喜歡。在瀏覽器里查看頁(yè)面源代碼時(shí),也許就成了問(wèn)題了,源代碼很不整潔,要是內(nèi)容多時(shí)問(wèn)題就更突出。本來(lái)想找腳本,卻在head標(biāo)簽里找不到,只能到其它標(biāo)簽里找了。(不知道有沒(méi)有哪些開(kāi)發(fā)工具在查看源代碼時(shí)可以把它們都區(qū)分開(kāi)來(lái),以方便查找)
第二個(gè)卻實(shí)是個(gè)問(wèn)題,也不多說(shuō)了。
有問(wèn)題就應(yīng)該解決,為了方便看效果,把它改成了后臺(tái)直接使用,開(kāi)發(fā)服務(wù)器控件時(shí)也使用,只是不用引用嵌入資源文件。
代碼如下,兩個(gè)方法:
注冊(cè)資源文件
/// <summary>
/// 注冊(cè)資源文件
/// </summary>
/// <param name="path">路徑</param>
/// <param name="key">要搜索的客戶端資源的鍵,防止</param>
/// <param name="type">資源文件類(lèi)型</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);//注冊(cè)資源key
}
}
此方法有三個(gè)參數(shù),第一個(gè)path是資源文件路徑;第二個(gè)key是資源文件標(biāo)識(shí),用來(lái)防止重復(fù)注冊(cè);第三個(gè)type,枚舉類(lèi)型,樣式和腳本兩類(lèi)。方法也很簡(jiǎn)單,通過(guò)為頁(yè)面Header控件增加自己定義控件以達(dá)到想要的效果。Page.ClientScript.IsClientScriptBlockRegistered(this.GetType(), key)用來(lái)檢測(cè)當(dāng)前頁(yè)面實(shí)例中此資源文件標(biāo)識(shí)是否已經(jīng)注冊(cè)過(guò),Page.ClientScript.RegisterClientScriptBlock(this.GetType(), key, "", false)這個(gè)不可少,此作用就是在當(dāng)前頁(yè)面實(shí)例中注冊(cè)該資源,其本來(lái)之意是注冊(cè)一個(gè)腳本,但此處的腳本為空。
注冊(cè)腳本塊(或者樣式塊)
/// <summary>
/// 注冊(cè)腳本塊(或者樣式塊)
/// </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);//注冊(cè)資源key
}
}
此方法有二個(gè)參數(shù),第一個(gè)script 是腳本塊(或者樣式塊),如<script>******</script>或都<style></style>之類(lèi)。方法體和上面的差不多,在此就不講了。
如何使用
此例在Page_Load方法里使用
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
body {
}
div { height:200px; background-color:Blue}
腳本文件:
JScript1.js
alert('這是js文件里的腳本');
頁(yè)面:
html
<!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>
相關(guān)文章
asp.net中幾種常用的身份驗(yàn)證方法總結(jié)
本篇文章小編就為大家介紹一下在asp.net中幾種常用的身份驗(yàn)證方法。需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2013-11-11.net SMTP發(fā)送Email實(shí)例(可帶附件)
本文為大家詳細(xì)介紹下.net SMTP發(fā)送Email同時(shí)可帶附件的具體實(shí)現(xiàn)思路及代碼,想實(shí)現(xiàn)的朋友可以參考下哈,希望對(duì)大家有所幫助2013-07-07.net core 讀取本地指定目錄下的文件的實(shí)例代碼
這篇文章主要介紹了.net core 讀取本地指定目錄下的文件的實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2018-09-09.net動(dòng)態(tài)顯示當(dāng)前時(shí)間(客戶端javascript)
剛才在首頁(yè)看到 asp.net實(shí)現(xiàn)動(dòng)態(tài)顯示當(dāng)前時(shí)間 這篇文章, 作者用Ajax實(shí)現(xiàn)類(lèi)似時(shí)鐘的效果!2009-11-11asp.net sqlconnection con.close和con.dispose區(qū)別
con.close是用來(lái)關(guān)閉和數(shù)據(jù)庫(kù)的連接,相對(duì)于open2008-12-12Visual Studio 2013+OpenCV2.4.10環(huán)境搭建教程
這篇文章主要為大家詳細(xì)介紹了Visual Studio 2013+OpenCV2.4.10環(huán)境搭建教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01在ASP.NET中使用Session常見(jiàn)問(wèn)題集錦
在ASP.NET中使用Session常見(jiàn)問(wèn)題集錦...2007-08-08.NET?Core支持Cookie和JWT混合認(rèn)證、授權(quán)的方法
這篇文章主要介紹了.NET?Core如何支持Cookie和JWT混合認(rèn)證、授權(quán),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-01-01