Asp.net後台把指令碼樣式輸出到head標籤中節省代碼冗餘

來源:互聯網
上載者:User

 最近在學習程式開發伺服器控制項,其它就少不了為控制項註冊js和css之類的資源檔,或者直接註冊純指令碼樣式。其中就遇到如下問題:

    1、 註冊的資源檔或純指令碼樣式在產生的頁面中都不在head標籤中(當然這個不影響頁面功能)

    2、 一個頁面使用多個一樣的控制項時,會出現重複輸入(出現多餘代碼)

第一個問題說到底也不是什麼問題,主要是看個人喜歡。在瀏覽器裡查看頁面原始碼時,也許就成了問題了,原始碼很不整潔,要是內容多時問題就更突出。本來想找指令碼,卻在head標籤裡找不到,只能到其它標籤裡找了。(不知道有沒有哪些開發工具在查看原始碼時可以把它們都區分開來,以方便尋找)

    第二個卻實是個問題,也不多說了。

    有問題就應該解決,為了方便看效果,把它改成了後台直接使用,程式開發伺服器控制項時也使用,只是不用引用嵌入資源檔。

    代碼如下,兩個方法:

複製代碼 代碼如下:註冊資源檔

/// <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
}
}

此方法有三個參數,第一個path是資源檔路徑;第二個key是資源檔標識,用來防止重複註冊;第三個type,枚舉類型,樣式和指令碼兩類。方法也很簡單,通過為頁面Header控制項增加自己定義控制項以達到想要的效果。Page.ClientScript.IsClientScriptBlockRegistered(this.GetType(), key)用來檢測當前頁面執行個體中此資源檔標識是否已經註冊過,Page.ClientScript.RegisterClientScriptBlock(this.GetType(), key, "", false)這個不可少,此作用就是在當前頁面執行個體中註冊該資源,其本來之意是註冊一個指令碼,但此處的指令碼為空白。

複製代碼 代碼如下:註冊指令碼塊(或者樣式塊)

/// <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
}
}

 此方法有二個參數,第一個script 是指令碼塊(或者樣式塊),如<script>******</script>或都<style></style>之類。方法體和上面的差不多,在此就不講了。

  

  如何使用

此例在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檔案裡的指令碼');

頁面:
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>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.