自己写了一个自定义控件的工程,工程名为TestControls,自定义控件的内容为:
namespace TestControls { public class TestBoxControl : Control { private string textValue = "コピー"; [Description("ボタンのテキスト値")] [Browsable(true)] public virtual string TextValue { set { textValue = value; } } protected override void Render(HtmlTextWriter writer) { writer.Write("<input id=\"TextInput\" type=\"text\"/>"); writer.Write("<input id=\"Copy\" type=\"button\" value=‘" + textValue + "‘ onclick =\"copy();\"/>"); writer.Write("<input id=\"TextWrite\" type=\"text\" readonly=\"readonly\"/>"); base.Render(writer); } }
其中的copy方法是javascript脚本方法:
function copy() { var textInputValue = document.getElementById("TextInput").value; document.getElementById("TextWrite").value = textInputValue; }
脚本名字是Textbox.js,且在TestControls工程中。
有另外一个工程Test,引入了TestContrls.dll,现在要引入TestBoxControl控件。但是脚本方法copy()怎样才能调用得到呢?
要引入js脚本的步骤有:
1.编写js脚本,并且设置js文件的属性为:嵌入的资源(如下图所示)
2.在自定义控件的开头写上
"[assembly: System.Web.UI.WebResource("TestControl.JavaScript.js", "text/javascript")]"如下图:
注意:TestControl.JavaScript.js中TestControl为js所在的文件夹的名字,由于我的程序集的默认命名空间为空,因此此处为TestControl.JavaScript.js。如果默认命名控件不为空,则应该加上。格式为:默认命名控件.js所在的文件夹名.js文件名。
3.在自定义控件中OnPreRender中引入js脚本
1 protected override void OnPreRender(EventArgs e) 2 { 3 if (this.Page != null) 4 { 5 this.Page.ClientScript.RegisterClientScriptResource(typeof(TestControl), "TestControl.JavaScript.js"); 6 } 7 base.OnPreRender(e); 8 }
注意,此处的js文件名的写法,可以用reflector打开当前编写的dll查看,以确保js名的正确性。
最后如何查看js的引入是否正确呢?
启动调用当前自定义控件的页面,在vs中可以看到如图所示
点击此处可现实就是源码。如果此处显示script block,点击后打开的是空白的,则表示js引入失败。
时间: 2024-10-10 00:17:00