您好,欢迎访问一九零五行业门户网

高效管理ASP.NET的JavaScript库

简介
对于asp.net开发人员来说,管理项目中的javascript都很随意:
我想这很大程度上可能是因为网上没有如何妥善处理asp.net中javascript的可靠信息。此文的目的就是提供一种最佳方案,用于管理asp.net中的javascript。该方案将能解决以下问题:
内联js:把js直接放在页面中将导致页面臃肿不堪。 
发布js:经常忘记发布js文件。 
错误引用:在其它web程序中引用js时经常失败。 
依赖性:需要记住js文件中错综复杂的依赖关系。 
无效引用:页面上引用的js从来没有被用到。 
http/https:跨https页面引用http的js。 
重构:重构一个新版本将花费大量时间。 
冗余:多次引用统一个js文件。 
预备知识
确保已安装visual studio 2010。express版可能不支持此文涉及到的一些概念。
概述
大部分上述问题是由把js或js文件引用直接放到aspx页面引起的。对几乎所有上述问题的解决方法是使用asp.net的内置功能来嵌入js文件到一个dll,然后动态引用这些文件。本文将演示这些功能,以及一些充分使用它们的技巧。接下来我们将逐步介绍该如何实现。
开始
第一步,启动visual studio 2010,并新建一个名为parchmentpurveyor的空web程序。
接下来添加一个窗体:default.aspx,并添加一些简单的html代码。大致如下:
<%@ page language="c#" autoeventwireup="true" codebehind="default.aspx.cs" inherits="parchmentpurveyor.default" %><html xmlns="http://www.w3.org/1999/xhtml"><headrunat="server">    <title>parchment purveyor</title></head><body>    <form id="form1" runat="server">        <h1>parchment purveyor</h1>        <p>paper for printers, painting, publication,            paper planes, and plenty of other plebeian projects!</p>    </form></body></html>
添加js
不同于在站点中添加js文件,我们新建一个项目,用于包含我们所有的js文件。在解决方案中添加一个新的类库项目javascriptlibrary:
项目添加后删除class1.cs文件,右键项目,选择添加文件夹,并命名为javascript,然后在该文件夹中添加两个js文件,分别为showmessage.js和greetuser.js,下一步,在项目中添加一个类javascripthelper(注意不要放到javascript目录下),现在解决方案目录结构如下:
接下来编写js,在showmessage.js中添加如下代码:
function showmessage(msg) {    alert(message from website: + msg);}
在greetuser.js文件中添加如下代码:
function greetuser() {    showmessage(greetings and salutations!);}
注意,greetuser()依赖于showmessage()。
嵌入js文件
相比把js文件发布到站点,我们更乐于把它们嵌入到dll。这样子,如果dll被发布到站点,那么所有js文件也被自动发布。做到一点很简单,我们只需要右键js文件,打开属性页,为“生成操作”选择“嵌入资源”即可,如下:
在确定js文件嵌入dll后,你需要使它们能够被web用户访问。为此,需要为项目javascriptlibrary添加system.web的引用:
然后编辑javascripthelper.cs,添加如下代码:
using system.web.ui;[assembly: webresource(javascriptlibrary.javascript.showmessage.js, application/x-javascript)][assembly: webresource(javascriptlibrary.javascript.greetuser.js, application/x-javascript)]
这样就能保证web用户通过客户端访问嵌入式js文件了。
引用嵌入式js文件
现在你已嵌入了js文件,并能通过客户端电脑访问它们。在使用的时候,你必须在页面上引用它们。为此,需要对javascripthelper类做如下修改:
using system;using system.web.ui;[assembly: webresource(javascriptlibrary.javascript.showmessage.js, application/x-javascript)][assembly: webresource(javascriptlibrary.javascript.greetuser.js, application/x-javascript)]namespace javascriptlibrary{    /// <summary>    /// 帮助页面引用嵌入式js文件    /// </summary>    public class javascripthelper{        #region 静态字段        private const string name_show_message = javascriptlibrary.javascript.showmessage.js;        private const string name_greet_user = javascriptlibrary.javascript.greetuser.js;        #endregion        #region 公共方法        /// <summary>        /// 在页面上引用showmessage.js文件        /// </summary>        /// <param name="manager">通过page.clientscript访问</param>        public static void include_showmessage(clientscriptmanager manager){            includejavascript(manager, name_show_message);        }        /// <summary>        /// 在页面上引用greetuser.js文件 (包括所有依赖文件)         /// </summary>        /// <param name="manager">通过page.clientscript访问</param>        public static void include_greetuser(clientscriptmanager manager){            //依赖(showmessage.js).            include_showmessage(manager);            //引用 greetuser.js.            includejavascript(manager, name_greet_user);        }        #endregion        #region 私有方法        /// <summary>        /// 在页面上引用指定的嵌入式js文件        /// </summary>        /// <param name="manager">通过page.clientscript访问</param>        /// <param name="resourcename">用于标示嵌入式js文件的名字</param>        private static void includejavascript(clientscriptmanager manager, string resourcename){            var type = typeof(javascriptlibrary.javascripthelper);            manager.registerclientscriptresource(type, resourcename);        }        #endregion    }}
includejavascript()是关键所在。它通过调用registerclientscriptresource()确保为嵌入式js文件获取一个脚本标签。include_greetuser()调用了includejavascript(),同时也调用了include_showmessage()(用于处理依赖关系)。因此,任何页面在引用greetuser()时也将引用showmessage()。
现在我们有了可用的类,接下在让我们在default.aspx页面中试用它。首先在站点parchmentpurveyor中添加对javascriptlibrary的引用:
接下来我们需要修改引用js页面的后台代码。
using system;using system.web.ui;namespace parchmentpurveyor{&n
其它类似信息

推荐信息