写WebControl的时候迟早要遇到js,毕竟不能再服务器端搞定一切.这时候再类库中引用js就是个问题.
比如我要做一个省市联动的下拉表单,如果选择省,生成市时要回传就幼稚了,我可以有好多选择:
1.js就是个独立的文件,相对路径固定,那么我可以直接拼接出文件位置,用<script src="/path/City.js" type="text/javascript"></script>调用.
2.就当js它是个字符串,直接在控件的Render里写<script >...</script>块.
3.稍专业点,在PreRender里
3.向AssemblyInfo.cs文件中添加如下行注意名称: 名称= 程序集名 + 目录名 + 文件名, yj.WebControl.ClientScriptResourceTest.script1.js 为名称)
[assembly: System.Web.UI.WebResource("yj.WebControl.ClientScriptResourceTest.script1.js", "application/x-javascript")]
[assembly: WebResource("ControlLib.City.js", "application/x-javascript")]
namespace ControlLib
{
public class UserContactControl:WebControl,System.Web.UI.INamingContainer
{
protected override void OnPreRender(EventArgs e)
{
if (this.Page != null)
{
ClientScriptManager manager = this.Page.ClientScript;
manager.RegisterClientScriptResource(typeof(UserContactControl), "ControlLib.City.js");
}
base.OnPreRender(e);
}
}
}
同时,City.js文件的属性里 "生成操作" 选项要选 "嵌入的资源".
问题又来了,js里面有中文.输出到页面时,编码是GB2312的,而.net默认的是utf-8的.
1.在vs2005中打开需要编码的js,如City.js
2.在vs2005的文件菜单中选择:[高级保存选项]
选择编码:Unicode (UTF-8带签名) - 代码页 65001
行尾:当前设置
点击确定以后再保存即可