露雨城市-南京.NET爱好者
主要讨论的为C#,ASP.NET,Sql Server2005,包括VSTS 2005的相关工具和功能。
posts - 32,  comments - 128,  trackbacks - 11
我今天在做例子的时候,在datalist中的模板列中加了两个textbox,然后进行绑定,因为我又放了一个日历控件,所以为了客户端不刷新,我就加了ajax控件,然后把日历控件拖到ajax控件中UpdatePanel中.

结果我发现日历控件直接暴露在当前的Page实例中了,也就是说可以直接使用Calendar1.SelectedDate来得到它的值了.而在之前都是要通过FindControl("Calendar1")来实现的.

可是奇怪的事发生了,我接着用了FindControl("TextBox2")的方法,想得到第二个广本框的对象引用,然后给它赋上日历控件当前选择的日期值.因为我是在日历控件的onSelectionChanged事件中写的,所以怎么也没得到值.
我发现明明已经得到文本框的对象引用了,可是赋值无效.我猜想是UpdatePanel的问题,于是我把TextBox2也放到了UpdatePanel中来,结果可以了,而且TextBox2也直接暴露出来了.

那我在onSelectionChanged中直接写TextBox2.Text = Calendar1.SelectedDate.ToShortDateString();就行了.

方便是方便了,不过不知道这是好还是坏,因为我不明白这里面的原理,我接触vs2005的ajax控件也没多久,所以我想了解的深入一点,请高手能够指教这里的原因,以及暴露控件ID的原理或更多内容,谢谢.

想先放在首页几天,得到答案后,我就会自动取消放在首页的,请dudu支持,谢谢.

FeedBack:
2008-03-08 14:27 | 戒焦戒躁      
之所以UpdatePanel中的控件可以直接引用,是因为UpdatePanel的ContentTemplate是标记了“TemplateInstance(TemplateInstance.Single)”属性的,这就意味着其中的控件ID是不会被重复使用的(除非你故意要在页面上放两个相同ID的控件),所以不需要通过FindControl("Calendar1")这种方式来引用。
现在Asp.net Ajax 1.0的源码微软已经放出来了,你可以查看一下UpdatePanel控件的源码。

 回复 引用 查看   
 网名:MOON
 博客:luyu.cnblogs.com
 网站:露雨虚拟城市
 QQ:80188871 (注明.net爱好者)
 mail:moonxp@126.com

昵称:露雨城市.NET2.0和Sql Server 2005开发研究
园龄:6年3个月
粉丝:1
关注:0

<2007年8月>
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678

搜索

 
 

常用链接

最新随笔

随笔分类(41)

随笔档案(32)

个人网站

  • 露雨虚拟城市
  • 设计资源无限网-韩国网站模版

优秀Blog

积分与排名

  • 积分 - 57543
  • 排名 - 1840

最新评论

阅读排行榜

评论排行榜

推荐排行榜