这些问题提的都蛮有意思的 不敢班门弄斧,只是就其中几个我知道的问题 发表一下自己的看法
*问题4. 谈谈 AutoEventWireup "uestc95:AutoEventWireup属性是用来控制是否允许page framework自动调用 Page_Init和Page_Load方法的,默认情况下是true."
我的说明:在Page这个directive里vs会自动地帮你写上AutoEventWireup="false", 去掉它,系统默认为true,它倒底是个什么东东呢,uestc95的回答是完全正确的
我们可以做一个实验,把它设为true,然后再在Page_Load里添上一行代码 Response.Write("I Love you,BABE!"); 然后执行,哈哈,我爱了你两次。
我们改一点东西,把在InitializeComponent()里的那句 this.Load += new System.EventHandler(this.Page_Load);注释了 再执行,哈哈,肉麻的话说一遍就可以了嘛。
答案到这里就很清楚了,有了AutoEventWireup="true",我们就没有必要在为Page的事件 显式的绑定处理方法了,系统会自动的执行Page_Init和Page_Load
*问题X:扩展问题:如何动态地,用程序(programmatically)引用一个 user control? 有什么要注意的? 众所周知user control可以通过在HTML代码里添加标记的形式加入到页面中 它也可以在程序里动态的载入 方法很简单,先声明一个myControl protected System.Web.UI.Control myControl;
然后这样 myControl=LoadControl("XXXXXXX.ascx");
再把它添加到一个继承于System.Web.UI.Control的WebControl里就可以了,比如Panel myPanel.Controls.Add(myControl);
我想操作我的User Control怎么办 ((你的User Control的类名)myControl).你想执行的方法;
*问题14: 如果你通过继承 System.Web.UI.Control 写了个 Custom Control, 如何加上对 client-side script 的支持? "uestc95:比如在一个<asp:button>中想要增加一个客户端脚本事件: Button1.Attributes.Add("onclick","alert(‘客户端的javascritp脚本’)");"
刚开始我以为是为User Control添加client-side script 的支持,仔细一看,我看错了:-( uestc95的回答完全正确,的确值得我们崇拜他一下。
不过问题有一个地方写得不太对,应该是: "如果你通过继承 System.Web.UI.WebControls.WebControl 写了个 Custom Control" 因为只有WebControl才有这个WebControl.Attributes Property哟!
另外再顺带一下,如果你想在你的User Control里实现类似DataGrid的 Client-side JavaScript for Custom Postback务必要让你的User Control实现 System.Web.UI.IPostBackEventHandler这个接口,然后用Page.GetPostBackEventReference传送 事件参数,再用RaisePostBackEvent来拿到参数处理提交。 这个在quickstart里有完整的例子,有兴趣的朋友可以去看看
*问题16: 自己写个 control 如何支持 template? 能否在 control 中写代码读取 template 中将要放入的内容(比如控件)的值?
这个问题很奇怪,高手们谁都没给出答案(因为太Easy了:-),让我们这些潜水员都急坏了 我就试着答一下吧
User Control是可以支持Template的,如果它支持,我们可以给它一个外号:Templated control 首先,Templated control 应该实现INamingContainer,防止放在Template里的控件和外面的重名 请注意,我用了应该这个词,而不是必须
其次,Templated control必须至少有一个这样的属性 属性类型是ITemplate,且属性读写方法前必须有[TemplateContainer(typeof(模板里放入的东东))] 程序是这样的:
private ITemplatemyTemplate = null;
[TemplateContainer(typeof(模板里放入的东东))] public ITemplate MyTemplate { get { return myTemplate; } set { myTemplate = value; } }
然后我们要override一下CreateChildControls方法,象这样:
protected override void CreateChildControls() {
if (myTemplate != null) { 模板里放入的东东 i = new 模板里放入的东东; myTemplate.InstantiateIn(i); this.Controls.Add(i); } }
写到这里我发现了一个问题,就是这个"模板里放入的东东"是我new出来的 而不是分析aspx代码读到的,这带来的副作用就是我事先就确定了模板里的内容 这就不灵活了,可能也和这个问题的本意发生了矛盾。 如果有人知道,希望出来解一下惑!!!!!
第二个问题嘛,我想用FindControl这个方法应该可以搞定吧.
|