欢迎光临
我们一直在努力

KW问题之我见-.NET教程,.NET Framework

建站超值云服务器,限时71元/月

这些问题提的都蛮有意思的
不敢班门弄斧,只是就其中几个我知道的问题
发表一下自己的看法

*问题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 itemplate  mytemplate = 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这个方法应该可以搞定吧.

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » KW问题之我见-.NET教程,.NET Framework
分享到: 更多 (0)