组件开发之IPostBackDataHandler和OnLoad

    今天,做了一个UserControl,里面包含两个自定义控件,由于需要自动更新用户回发的数据,所以在OnLoad事件中获取用户数据,可是其中的日期选取控件,使用了两次,却只有一个控件可以取得正确的用户数据! 调试半天不得其法,终于发现自定义控件也是在OnLoad事件中更新自己的值,估计是执行顺序造成的.
    将控件改为实现IPostBackDataHandler接口
#region IPostBackDataHandler 成员

        
public bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection)
        {
            
string txt = postCollection[this.UniqueID + ":txtText"];
            
string val = postCollection[this.UniqueID + ":txtValue"];
            
if(txt!= Text  || val!=Value )
            {

                ViewState["Text"= txt;
                ViewState[
"Value"= val;
                
return true;
            }
            
return false;
        }
        
public event EventHandler ValueChanged;
        
        
public void RaisePostDataChangedEvent()
        {
            
if (ValueChanged != null)
                ValueChanged(
this, EventArgs.Empty);
        }

        
#endregion
    改造之后终于可以在UserControl中正确取得用户回填的值了!试着在UserControl这一级也使用这种方式取数,有出现了刚才的问题!看来在UserControl级别只能使用OnLoad来实现了.
    问题总算解决了,并且顺便实现了事件触发机制,控件更完善了算是个意外收获.
     总结: 看来服务器端控件必须按照规范实现不同的接口,否则通过不规范的手段实现的功能也很不可靠.
    
posted @ 2006-04-05 17:07 大剑师 阅读(830) 评论(1)  编辑 收藏 网摘 所属分类: ASP.NET 控件开发

  回复  引用  查看    
#1楼2009-01-17 11:15 | 〆o殺殸纨o〆      
不错,学习了,谢谢分享



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 367660




相关文章:

相关链接: