随笔 - 290  文章 - 10  评论 - 85  2

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 方法)中读取保存的数据

 

ViewState
 1         protected override void LoadControlState(object savedState)
 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代码. 如果写组合控件,必须重写

CreateChildControls()方法,不然在页面PostBack之后,控件会消失

 

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

 

posted on 2010-11-23 22:17  Gu  阅读(...)  评论(...编辑  收藏