·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> 网站建设开发 >> ASP.NET网站开发 >> Asp.Net之后台加载JS和CSS

Asp.Net之后台加载JS和CSS

作者:佚名      ASP.NET网站开发编辑:admin      更新时间:2022-07-23

asp.net之后台加载JS和CSS

在Asp.Net开发时,用到的JS库、通用的CSS等,在许多页面都会用到,而每次都需要手动引入,相当麻烦,而且有时一旦忘了引用,还得找半天才能找到问题。那有没有什么办法能够一劳永逸的呢?答案是有的。

我们知道Asp.Net是可以通过后台来渲染前端的,所以如果能够在渲染时将所要的js库和css等添入就可以了。而为了能够复用,所以需要进行类的继承。我们写一个Page的基类PageBase,代码如下。

[html]view plaincopy在CODE上查看代码片派生到我的代码片
  1. usingSystem;
  2. usingSystem.Collections.Generic;
  3. usingSystem.Linq;
  4. usingSystem.Web;
  5. usingSystem.Web.UI;
  6. usingSystem.Web.UI.HtmlControls;
  7. usingSystem.Text;
  8. namespaceAspNetLoadJsCss.Common
  9. {
  10. publicclassPageBase:System.Web.UI.Page
  11. {
  12. publicstaticreadonlystringSCRipT_INCLUDE_TEMPLATE="<scriptsrc=\"{0}\"type=\"text/javascript\"></script>\r\n";
  13. publicstaticreadonlystringSTYLE_INCLUDE_TEMPLATE="\r\n<linkhref=\"{0}\"rel=\"stylesheet\"type=\"text/css\"/>\r\n";
  14. publicstaticreadonlystringSCRIPT_CONTENT_TEMPLATE="<scripttype=\"text/Javascript\">{0}</script>\r\n";
  15. PRotectedvoidPage_InitComplete(objectsender,EventArgse)
  16. {
  17. LiteralControlviewportControl=newLiteralControl();
  18. viewportControl.ID="viewport";
  19. viewportControl.Text="\r\n<metaname=\"viewport\"content=\"width=device-width,initial-scale=1\"/>";
  20. this.Header.Controls.AddAt(GetNextControlIndex(this),viewportControl);
  21. LiteralControljqueryCssControl=newLiteralControl();
  22. jqueryCssControl.ID="/jquery.mobile-1.4.4.min.css";
  23. jqueryCssControl.Text=String.Format(STYLE_INCLUDE_TEMPLATE,"/css/themes/default/jquery.mobile-1.4.4.min.css");
  24. this.Header.Controls.AddAt(GetNextControlIndex(this),jqueryCssControl);
  25. LiteralControlmyCssControl=newLiteralControl();
  26. myCssControl.ID="/my.css";
  27. myCssControl.Text=String.Format(STYLE_INCLUDE_TEMPLATE,"/css/my.css");
  28. this.Header.Controls.AddAt(GetNextControlIndex(this),myCssControl);
  29. Stringjspath="/js/jquery.js";
  30. this.ClientScript.RegisterStartupScript(this.GetType(),
  31. "jquery",
  32. String.Format(SCRIPT_INCLUDE_TEMPLATE,jsPath),
  33. false);
  34. jsPath="/js/jquery.mobile-1.4.4.min.js";
  35. this.ClientScript.RegisterStartupScript(this.GetType(),
  36. "jquery.mobile",
  37. String.Format(SCRIPT_INCLUDE_TEMPLATE,jsPath),
  38. false);
  39. jsPath="/js/default.js";
  40. this.ClientScript.RegisterStartupScript(this.GetType(),
  41. "default",
  42. String.Format(SCRIPT_INCLUDE_TEMPLATE,jsPath),
  43. false);
  44. }
  45. ///<summary>
  46. ///取得下一个控件的位置
  47. ///</summary>
  48. ///<returns></returns>
  49. privatestaticintGetNextControlIndex(Pagepage)
  50. {
  51. intindex=0;
  52. //如果存在自定义(以CONTROL_ID_PREFIX开头)的控件,则返回最后一个自定义控件的下一个位置
  53. //如果不存在自定义的控件,则返回<title>的下一个位置
  54. boolstartControlBlock=false;
  55. inttitleIndex=0;
  56. StringCONTROL_ID_PREFIX="";
  57. foreach(Controlcinpage.Header.Controls)
  58. {
  59. if(cisHtmlTitle)
  60. {
  61. titleIndex=index;
  62. }
  63. if(c.ID!=null&&c.ID.StartsWith(CONTROL_ID_PREFIX))
  64. {
  65. startControlBlock=true;
  66. }
  67. else
  68. {
  69. if(startControlBlock)
  70. {
  71. break;
  72. }
  73. }
  74. index++;
  75. }
  76. intretIndex=startControlBlock?index:titleIndex+1;
  77. if(retIndex<0)
  78. {
  79. retIndex=0;
  80. }
  81. elseif(retIndex>=page.Header.Controls.Count)
  82. {
  83. retIndex=page.Header.Controls.Count-1;
  84. }
  85. returnretIndex;
  86. }
  87. protectedvirtualvoidPage_Load(objectsender,EventArgse)
  88. {
  89. }
  90. }
  91. }

注:

1.在页面初始化完成的时候载入相应的JS和CSS文件,所以在Page_InitComplete中实现代码。

2.对于CSS文件需要添加到header中,所以使用Header来添加LiteralControl的CSS控件。

3.对于JS文件,使用注册的方式来载入。

4.如果需要载入一些通用的JS函数或者CDATA,也可以考虑这种方式。

有了PageBase页面之后,对于需要加载这些JS和CSS的页面,就可以直接继承于PageBase,然后重载Page_Load函数,其他的就是正常的写法了。比如

Test页面的后端代码

[html]view plaincopy在CODE上查看代码片派生到我的代码片
  1. publicpartialclassTest:PageBase
  2. {
  3. protectedoverridevoidPage_Load(objectsender,EventArgse)
  4. {
  5. }
  6. }

Test页页的前端代码

[html]view plaincopy在CODE上查看代码片派生到我的代码片
  1. <%@PageLanguage="C#"AutoEventWireup="true"CodeBehind="Test.aspx.cs"Inherits="AspNetLoadJsCss.Test"%>
  2. <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <htmlxmlns="http://www.w3.org/1999/xhtml">
  4. <headrunat="server">
  5. <title></title>
  6. </head>
  7. <body>
  8. <formid="form1"runat="server">
  9. </form>
  10. </body>
  11. </html>

渲染后的HTML页面