1.如何嵌入资源(js,image,css)?如何使用
A: 把资源文件的属性改成Embedded Resource, 在代码文件namespace前加入资源的声明,
[assembly: WebResource("Terry.Webcontrol.project.default.css", "text/css", PerformSubstitution=true)]
[assembly: WebResource("Terry.Webcontrol.project.file.js", "text/javascript")]
如果资源文件要引用其它嵌入资源,声明时要加 PerformSubstitution=true, 然后用服务器标签<%=webresource("xxx")%>就可以引用
2. 控件属性是否要放到viewstate? 如果页面禁用了ViewState怎么办?
A:为了在禁用了ViewState时使用控件状态,需要做额外的几个工作:
1. 向页面注册使用控件状态
2. 在控件状态保存事件(Control 类的SaveControlState 方法)中保存相关数据
3. 在控件状态读取事件(Control 类的LoadControlState 方法)中读取保存的数据
2 {
3 if (savedState != null)
4 {
5 object[] obj = (object[])savedState;
6 base.LoadControlState(obj[0]);
7 _FileSizeLimit = Convert.ToString(obj[1]);
8 _UploadUrl = Convert.ToString(obj[2]);
9 }
10 base.LoadControlState(savedState);
11 }
12 protected override object SaveControlState()
13 {
14 object[] obj = new object[4];
15 obj[0] = base.SaveControlState();
16 obj[1] = _FileSizeLimit;
17 obj[2] = _UploadUrl;
18 return obj;
19 }
3. 控件需要重写哪些方法呢?
A: OnPreRender 里面可以引入CSS和JS文件, 重写RenderContents,生成输出的HTML代码. 如果写组合控件,必须重写
4.如何把控件的属性传到JS文件呢?
A: 可以用一些特殊的标志作为变量,然后在CS文件替换,如 $SessionId$
5. 如何处理多语言?
A: 准备多个资源文件,如Res.resx 和Res.Zh-CN.resx, 然后在RenderContents方法用
ResourceManager.GetString("xxx")读内容,它会根据页面的uiCulture自动显示中文或英文.
6. 自定义控件的默认标签是<span>,怎么改成<div>
A:重写RenderBeginTag 进行修改
public override void RenderBeginTag(HtmlTextWriter writer)
{
writer.AddAttribute(HtmlTextWriterAttribute.Id, this.ClientID);
writer.RenderBeginTag(HtmlTextWriterTag.Div);
}
7. 如何调试DesignMode的错误.
A:打开另一个VS进程,Debug-> attach to process --> select devenv, 在代码放断点, 然后在原来的VS上切换成DesignView