一直想做一些自訂控制項,能進行一些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執行,點擊輸入框看效果. |