这是一个关于 ASP.NET 开发 Web 服务器控件的问题。近来我不断地研究如何制作自己的 Web 自定义服务器控件,在研究的过程中遇到一个问题。问题就是控件在客户端浏览器中运作的时候需要浏览器脚本支持一些简单的动态效果,但我又不想把 JSCript 或 VBScript 的代码文本通过 HTMLTextWriter 类写到页面 HTML 源代码中。如果把控件和只包含脚本的 JS 或 VBS 文件分开发布,维护的时候又会非常的困难。因为如果我把控件的 DLL 文件和脚本文件分开发布给下一位开发时用户(使用我开发的控件的程序员)使用时需要额外定制控件的一个字符串属性,表示脚本文件所在的 URL。这样做的另外一个缺点就是容易被控发时用户拆解和修改我的客户端脚本。请问各界高手,是否有一种方法能够使客户端脚本作为控件资源的一部分,捆绑在 Web 自定义控件的 DLL 文件中。让 IIS 运行控件 DLL 文件的时候由 .net framework 运行时自动管理客户端脚本文件及代码。在控件最终发布的时侯只需要发布控件的 DLL 文件就能够在运行时用户中同时完成控件 HTML 文本生成和客户端脚本文件生成两部分。其实 Microsoft .net framework 中内置了一系列是这种功能的 Web 服务器控件。所有的验证控件都具备这样的功能,包括 RequiredFieldValidator、CompareValidator、RegularExpressionValidator、CustomValidator 和 ValidationSummary。这些控件会验证运行时用户在浏览器中输入的内容,在浏览器中通过浏览器脚本先验证一次,验证通过后送到服务器在验证一次,如果在浏览器中验证有误就会显示提示语句并阻止浏览器表单提交数据而无须刷新浏览器页面。这些控件所使用的客户端脚本可以在 iis 的 /aspnet_client 目录中找到。其实这是一个很有挑战性的问题,希望所有的高手一起共同协力解决。提供最佳解决方案的一位可以全数获得 300 分,另外的 200 分可以在问题解决后在同一栏目中出现的 Purely 加分贴 1 和 Purely 加分贴 2 中获得。届时敬请方案解决者前来回复加分贴。

解决方案 »

  1.   

    注:Viual Basic 编码及 Visual Basic 方案优先
      

  2.   

    把你的脚本保存在一个文本文件中,把这个文件文件做为嵌入的资源编译,在运行时先检验你的控件的脚本文件是否存在,若不存在就从控件所在的assembly中读取嵌入的脚本文件,并用这个文件的内容自动创建一个脚本文件保存在当前虚拟目录下,这个方法需要虚拟目录支持写权限,其实一般asp.net空间都支持的。