一直想做一些自定义控件,能进行一些UI上的验证.于是就需要使用到嵌入的JS文件.
找了一些资料,找了些例子,发现不行,首先把JS文 件设为嵌入资源是都有说的,
但[assembly: WebResource("SYJ0.dir0.js1.js", "application/x-javascript", PerformSubstitution = true)]中SYJ0的说明就不一样了.有的说是命名空间,有的说是项目名.都不是很正确.
原因分析:这些资料基本上所说都是建立的项目和命名空间相同.所以可能不会遇到问题.然而我建立的项目是不同的项目名. 如:我建立的控件库项目名为WebCtrls,然后修改了项目的默认命名空间为SYJ0.而在代码中的命名空间使用了SYJ...(有点混乱). 所以使用网上找的一些例子就是运行不了,要么没反应,要么提示出错...
最后解决: [assembly: WebResource("SYJ0.dir0.js1.js", "application/x-javascript", PerformSubstitution = true)]中SYJ0应该是项目属性窗口的那个默认命名空间名称. 后面跟JS文件的路径.如SYJ0.dir0.js1.js表示,默认命名空间SYJ0下面的dir0目录下的js1.js文件. 当然 this.Page.ClientScript.RegisterClientScriptResource(this.GetType(), "SYJ0.dir0.js1.js");这句也不要写错了.
请注意大小写,没有测试是否区分大小写,还是注意一下.
下面是一完整的控件库项目的例子: [Class1.cs] using System; using System.Web.UI.WebControls; using System.Web.UI;
[assembly: WebResource("SYJ0.JScript1.js", "application/x-javascript", PerformSubstitution = true)] [assembly: WebResource("SYJ0.dir0.js1.js", "application/x-javascript", PerformSubstitution = true)]
namespace SYJ { public class STextBox : WebControl, INamingContainer { protected TextBox textBox = new TextBox();
protected override void OnPreRender(EventArgs e) { this.Page.ClientScript.RegisterClientScriptResource(this.GetType(), "SYJ0.JScript1.js"); this.Page.ClientScript.RegisterClientScriptResource(this.GetType(), "SYJ0.dir0.js1.js"); base.OnPreRender(e); } protected override void RenderContents(System.Web.UI.HtmlTextWriter writer) { this.textBox.Attributes.Add("id", this.ID); this.textBox.Attributes.Add("onclick", "msg(this);showTime();"); this.textBox.RenderControl(writer); } } }
// JScript1.js function msg(obj) { alert("hello from web control s js file id["+obj.id+"]"); }
// dir0.js1.js function showTime() { alert(new Date()); }
使用方法: 用VS2008建一个解决方案,建立一个默认WEB项目为WebApplication,再建一个库项目. 将库项目的Class1.cs内容换成如上的内容,再在项目下直接建立一个JScript.js文件,再直接建立一个文件夹dir0,在dir0建立一个js1.js文件,内容分别如上所述. 编译一下,然后转到WEB项目的ASPX页面中,此时打开工具箱,应该会显示出我们创建的自定义控件STextBox.直接拖一个到页面,CTRL+F5执行,点击输入框看效果.
|
请发表评论