请教如何动态生成js包含文件?

wtiancai 2005-09-07 03:19:19
获得页面所有的控件
根据控件的类型,去脚本配置文件匹配对应的脚本文件名,然后输出脚本文件
如果这个脚本文件已经生成那么则不必重复生成

配置文件类似
<?xml version="1.0" encoding="utf-8" ?>
<javaScript-reference>
<!-- 脚本文件对应的名称以及路径 -->
<file-name name="Table" src="js/Table.js"></file-name>
<file-name name="Input" src="js/Input.js"></file-name>
<file-name name="ControlUtils" src="js/ControlUtils.js"></file-name>
<file-name name="Utils" src="js/Utils.js"></file-name>
<file-name name="WebUtils" src="js/WebUtils.js"></file-name>
<!-- 脚本关联文件 -->
<file-reference name="Table">
<file-name name="ControlUtils"></file-name>
<file-name name="Utils"></file-name>
<file-name name="WebUtils"></file-name>
</file-reference>
<file-referenct name="Input">
<file-name name="ControlUtils"></file-name>
<file-name name="WebUtils"></file-name>
</file-referenct>
<!--控件-->
<component name="Table" class="" file-name=""></component>
<component name="ProlinkInput" class="" file-name=""></component>
</javaScript-reference>

最后能够自动在页面中生成类似
<script language="javascript" src="../js/Math.js" ></script>
<script language="javascript" src="../js/Utils.js"></script>
<script language="javascript" src="../js/DataSource.js"></script>
<SCRIPT language="javascript" src="../js/ControlUtils.js"></SCRIPT>
<script language="javascript" src="../js/Table.js"></script>
<script language="javascript" src="../js/Input.js"></script>
<script language="javascript" src="../js/BtnTextInput.js"></script>
<script language="javascript" src="../js/Label.js"></script>
<script language="javascript" src="../js/Lookup.js"></script>
<script language="javascript" src="../js/Body.js"></script>
<script language="javascript" src="../js/WebUtils.js"></script>
...全文
289 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
saucer 2005-09-08
  • 打赏
  • 举报
回复
is your aspx derived from deriving from CreateClientScriptBlock??

if not, either pass Page object to your static method or use the HttpContext.Current.Handler, for example

namespace ProlinkClass
{
/// <summary>
/// CreateClientScriptBlock 的摘要说明。
/// </summary>
public class CreateClientScriptBlock
{
private Page _page;

public CreateClientScriptBlock(Page p)
{
_page = p;
}


public CreateClientScriptBlock()
{
_page = (Page)System.Web.HttpContext.Current.Handler;
}


public void OutputScripts() { GetScriptFile(_page); }

prviate void GetScriptFile(Control c){
OutputScriptFile(c);
foreach(Control cc in c.Controls){
if (cc.ID != null){
GetScriptFile(cc);
}
}
}

private void OutputScriptFile(Control c){
string sTypeName = c.GetType().Name;
string sFileName = "";
if (sTypeName.Equals("Label"))
sFileName = "Label.js";
else if (sTypeName.Equals("TextBox"))
sFileName = "Input.js";

string sScript = "<script language=\"javascript\" src=\"../js/" + sFileName + "\"></script>";
if (!_page.IsClientScriptBlockRegistered(sTypeName)){
_page.RegisterClientScriptBlock(sTypeName,sScript);
}
}

}
}



then do in your aspx code behind:

new ProlinkClass.CreateClientScriptBlock(Page).OutputScripts();

wtiancai 2005-09-08
  • 打赏
  • 举报
回复
To saucer:

这个错误原因是我在方法前多加了static

那我请问一下如何在页面上调用这个类中的GetScriptFile()方法呢?

我是直接
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
BindData();
CreateClientScriptBlock(this);
}


出现如下错误:F:\MyCase\Asp.net\SCHOOL\Webs\Importer\PurchaseOrderAdd.aspx.cs(50): 'ProlinkClass.CreateClientScriptBlock' denotes a 'class' which is not valid in the given context
wtiancai 2005-09-08
  • 打赏
  • 举报
回复
我专门建一个类用于注册客户端脚本块
wtiancai 2005-09-08
  • 打赏
  • 举报
回复
error:

F:\MyCase\Asp.net\SCHOOL\ProlinkClass\CreateClientScriptBlock.cs(42): An object reference is required for the nonstatic field, method, or property 'System.Web.UI.Page.IsClientScriptBlockRegistered(string)'
F:\MyCase\Asp.net\SCHOOL\ProlinkClass\CreateClientScriptBlock.cs(43): An object reference is required for the nonstatic field, method, or property 'System.Web.UI.Page.RegisterClientScriptBlock(string, string)'


using System;
using System.Collections;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml;

namespace ProlinkClass
{
/// <summary>
/// CreateClientScriptBlock 的摘要说明。
/// </summary>
public class CreateClientScriptBlock:System.Web.UI.Page
{
public CreateClientScriptBlock()
{
//
// TODO: 在此处添加构造函数逻辑
//
}

private static void GetScriptFile(Control c){
OutputScriptFile(c);
foreach(Control cc in c.Controls){
if (cc.ID != null){
GetScriptFile(cc);
}
}
}

private static void OutputScriptFile(Control c){
string sTypeName = c.GetType().Name;
string sFileName = "";
if (sTypeName.Equals("Label"))
sFileName = "Label.js";
else if (sTypeName.Equals("TextBox"))
sFileName = "Input.js";

string sScript = "<script language=\"javascript\" src=\"../js/" + sFileName + "\"></script>";
if (!Page.IsClientScriptBlockRegistered(sTypeName)){
Page.RegisterClientScriptBlock(sTypeName,sScript);
}
}

}
}
wtiancai 2005-09-08
  • 打赏
  • 举报
回复
thanks
saucer 2005-09-07
  • 打赏
  • 举报
回复
or use Page.RegisterClientScriptBlock method or Page.RegisterStartupScript method, make sure you use

1. give different script different key

2. use Page.IsClientScriptBlockRegistered(ScriptKey) or Page.IsStartupScriptRegistered(ScriptKey) to check

saucer 2005-09-07
  • 打赏
  • 举报
回复
void GetScriptFile(Control c)
{
OutputScriptFile(c);
foreach(Control cc in c.Controls)
GetScriptFile(cc);
}


void OutputScriptFile(Control c)
{
//if (c is Label)
{
string sTypeName = c.GetType().Name;
if (!Page.IsClientScriptBlockRegistered(sTypeName))
{
Page.RegisterClientScriptBlock(sTypeName, String.Format("<script language="javascript" src="../js/{0}.js"></script>", sTypeName));
}
}
....
}

GetScriptFile(Page);
wtiancai 2005-09-07
  • 打赏
  • 举报
回复
我这样做是减少页面代码数量
因为各个控件对应的脚本包含文件不一样,有的控件可能包含几个脚本文件
所以采用动态生成,在后台根据页面控件数量及控件类型动态生成对应的脚本包含文件
gxboy 2005-09-07
  • 打赏
  • 举报
回复
这很简单啊 TypeName。感觉没必要。这种做法不通用的。你不是每个页面的每个控件都要用到脚本。
比较可以的程序 想请教大家一起研究 ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃ News Speed Love / 速递交友   ┃ ┃ 程序版本:Nslove Version 5.0.0 ┃ ┃ 版权所有: 速递交友(nslove.com) ┃ ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫ ┃ News Speed Love ┃ ┃ Copyright 2003-2008 nslove.com - All Rights Reserved. ┃ ┃ nslove is a trademark of nslove.com ┃ ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫ ┃【版权声明】 ┃ ┃ 本软体为共享软体(shareware)提供个人网站免费使用。 ┃ ┃ 非经速递交友书面授权许可,不得将之用于盈利或非盈利性的商业用途。 ┃ ┃ 为适应实际的计算机应用环境或者改进其功能、性能,可以进行必要的修改 ┃ ┃ 但不得去除速递交友的版权标示,不得将修改后版本进行任何的商业行为。 ┃ ┃ 本软体为免费软件,用户自由选择是否使用,在使用中出现任何问题而造成 ┃ ┃ 的损失速递交友不负任何责任。 ┃ ┃ 使用该软件必须保留速递交友的版权声明,将该软件从原有自然语言文字转 ┃ ┃ 换成另一自然语言文字的,仍应注明出处。 ┃ ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫ ┃ 文件名称:Nslove5.0功能说明 ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛   安装要求:   安装环境:Windows2000以上,IIS5.0以上,商业版需要安装MSSql 2000以上,安装前请确保您满足安装环境。   组件要求:FSO读写权限,Adobe.Stream组件,邮件组件(如:Jmail),上传组件,水印组件   运行环境:ASP+Js+Ajax+XML   软件大小:22.6M   软件类别:国产软件|交友会员   软件语言:简体中文   软件授权:免费版   演示地址:http://www.nslove.com   相关链接:http://www.nslove.com   软件介绍:   1、Nslove5.0采用缓存+标签+模板重新设计核心,程序代码与模板分离,后台提供模板修改美化!语言环境ASP+SQL存储过程,支持达百万会员,结合Ajax无刷新设计,提高用户的使用体验。布局方式Div+CSS设计提高访问速度!各栏目可生成静态html。   2、后台提供会员资料采集,可采集世纪佳缘、嫁我网会员等,如需要采集另外网站与本人联系。采集系统用类设计,分析用正则分析,速度非常快,大约1.5秒采集一个会员资料包括头像下载到本地,一夜之间可以达到百万用户数据。   3、支持二级域名设置:可对各个栏目进行二级设计,当然服务器需要二级域名支持,自由命名自由指定。   4、支持国家、省州、市区分站生成,并且各个分站会员自动匹配   5、支持学校分站生成,可建立各学校的交友网分站   6、会员注册资料包括基本信息、详细信息、联系信息等,注册步骤基本按这个顺序注册,只要注册完第一步,可登录之后再注册。注册完发送邮件进行激活,并且有16位激活代码!用户必须激活。会员注册以邮件地址为注册名!会员每天登录都会自动发送一封邮件,可作宣传或者服务使用,邮件内容可以后台设置!   7、用户注册可推荐、机构加盟注册,推荐与机构都可进行提成,提成可在后台设置提成比率!   8、注册完成生成个人主页,会员拥有自己的个人资料主页!可自由选择模板,更具个性化。   9、会员认证:身份证、头像、视频认证及上传房产证、婚育证、职业证等,多达22项认证,只要认证5项,即可得到5星认证会员。   10、头像提供本地上传、视频拍照,头像可在线进一步处理,可翻转、放大、缩小等操作!   11、头像可以设置显示模式:所有人可见、会员可见、VIp会员可见、推荐会员可见、金币支付可见、密码可见等几项!   12、会员可以发布征婚信息,更加快速的征友征婚!可自由发送或者关闭!   13、有接收到邮件信息,系统会在右下角上升一个小窗口,提示邮件信息及类别!   14、会员可添加专递对象,可对会员发送置顶邮件,让对方不得不看邮件内容!达到醒目作用,自由申请   15、会员可申请服务:如升级VIP、明星榜(总站、地区分站)等服务,只要金币足够可以自由申请   16、支持在线聊天、会员可以邀请对方进行在线聊天,可以立即更详细了解对方。   17、会员可以参与网站赚钱计划,普通会员提供推广代码,只要对方浏览该网址,并没有注册但是以后只要访问并注册,也属于该会员的推广会员,推广会员可参与拥金提成,在交友的同时也可以参与赚钱是个不错的地方。对于婚介机构有自己的推广代码,提成比率是不同!提成比率可以后台设置。   18、栏目说明:博客日记、网友相册、线下活动、1+1约会、群组圈子、拼客、试客、恋爱诊所、话题(辩论型)等。   19、撰写日记可创建属于自己的日记,可生成静态的html文件。发布日记有金币操作。可设置一天操作几次,防止刷金币问题,也可以作为管理员推广某个栏目提高人气方法,如今天对某个栏目设置金币赠送,让会员都来参与。其它栏目也有这个功能。   20、用户可创建相册,生成静态相册本。文件数由后台设置!相册图片来源可以本地批量上传、视频拍照、远程抓取保存到本地。   21、支持用户创建群组功能!创建个数,由后台管理设置!群组方便有相同兴趣组成一个群落!群组可以创建论坛版块、相册等。可设置群组管理员、可升级群组等级(普通群、高级群、超级群、无限群),等级后台可以设置!群组可选择模板生成!   22、发布聚会活动,婚介机构会员可以发布、可申请服务如场地提供、志愿者服务、主持人、电视媒体等!   23、1+1约会,会员可以找对方发起私人约会,可对大众发起公开约会。   24、可发布和参与拼客、试客信息,借与交友网站会员宏大,可以提高会员活跃,在交友的同时有另外一份礼物!   25、恋爱诊所提供会员提问问题解决问题的地方!   26、升级VIP、VIP用户有更高的权限,有时间期限!明星榜提供会员自我推荐,成功率可成倍增长。推荐有时间限制及费用要求   27、成功故事,会员成功交友可以发布,让大家来分享他的快乐,可创建一个两个人的空间,可以发布成功经验、可以上传相册等,可以选择自己的模板生成静态   28、会员管理操作更人性化、无需频繁的跳转窗口,提交保存只会跳出一个小窗口即可保存!      更多功能将会在后续进行补充或者到官方论坛查看:http://www.nslove.com/bbs/    ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃ 福建速递交友网络科技有限公司 ┃ ┃ 网址:http://www.nslove.net、http://www.nslove.net ┃ ┃ 地址:福建省厦门市集美区凤林下头37号 ┃ ┃ 电话:0592-6250838 ┃ ┃ 手机:013459256001 ┃ ┃ 主机事业部:info@nslove.com ┃ ┃ 网站事业部:love@nslove.com ┃ ┃ 在线联系:QQ 10689579 MSN:Ns_L@hotmail.com ┃ ┃ 详细联系方法:http://www.nslove.cn/email.asp ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧