• 写自定义控件的FAQ


    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

  • 相关阅读:
    七, 表查询 一
    六, 表管理 二
    五,表管理 一
    四, 用户管理 二
    三, 用户管理 一
    二, 连接Oracle 二
    一,连接Oracle 一
    Oracle 11g 精简客户端
    解决Oracle在命令行下无法使用del等键问题
    NGINX反向代理,后端服务器获取真实IP
  • 原文地址:https://www.cnblogs.com/zitjubiz/p/1885940.html
Copyright © 2020-2023  润新知