简单服务器控件 单值绑定 bind 的一些总结

新学服务器控件和数据绑定,将自己这几天的一些心得总结

1.
首先是单值绑定的问题, 比如说对于TextBox的Text属性进行Bind,由于是Asp2.0的功能,文献很少,MSDN上也只是提到一句,也只能猜测其简单运行原理。
以 一个控件Custom嵌套在数据绑定GridView中,并将控件Text属性与数据源的一项绑定 为例
大致在ProcessPostData之后,LoadComplete之前,获取绑定属性并加以更新

2.
如果在LoadPostData中插入一个断点并在断点处强制退出,数据库相应绑定项会更新为空
个人认为,这暗示这一个数据处理上可能出现的错误,如果在更新前有个强制中断,可能导致数据库数据丢失
不知道这种猜测的正确性,并未验证

3.
关于接口IPostBackDataHandler的功能
第一次学,的确很迷茫,总结下来功能有下面两点:
    1]读取页面提交的数据并以此更新子控件
    2]以页面提交数据这一点为导火线(突然想到这个词,比较土),激发一些事件
这几天做的并未涉及到功能2],对于功能1]中的提交数据做了一些简单的研究:
重载IPostBackDataHandler接口,实现方法声明如下
public   bool  LoadPostData( string  postDataKey, System.Collections.Specialized.NameValueCollection postCollection)
设置断点,检测postCollection可以看到其数据结构中:
[2]__VIEWSTATE    视图状态
[3]...[n-3]    子控件状态
也就是说 视图状态其实和子控件状态在一起上传
个 人理解为视图状态是一些加了密的<input type='hidden' value='*' />,这样对视图状态也就有了比较好的了解,其中,value='*'中的'*'可以使一些串行化的对象,而这一串行化的过程不需要人为干预,这也 是视图状态最大的一个优点,同时也是不足[空间效率]

4.
有一点错误值得提出,也是这几天来碰到的最为恼火的事情,就是
服务器自定义复杂控件数据单值绑定后数据不更新的问题,简单的说就是提交后数据没有改变或变为null[这取决于你给数据的初值]
这点很让人郁闷,继承IPostBackDataHandler接口后在 LoadPostData方法中设置断点,发现这个方法并没有被使用过
最终发现看过的技术文章里忽略了这样一句话[引用Microsoft ASP.net服务器控件与组件开发]
在加载回传数据阶段,即在加载阶段之前,页面查看在名 / 值 表单传送集中的每一个名字,并且寻找控件树中与名字匹配的UniqueID控件...如果控件不能提供其UniqueID值作为表单元素的 name attribute,那么可以通过调用控件PreRender方法中包含页面的RegisterRequiresPostBack方法来参与加 载回传数据阶段
解释的很清楚,解决方案有两个
 1]增加一个以UniqueID为name attribute的隐藏控件
         protected   override   void  Render(HtmlTextWriter writer)
        
... {
            writer.Write(
"<input type='hidden' name='" + this.UniqueID + "'/>");
            
base.Render(writer);
        }
2]调用RegisterRequiresPostBack
         protected   override   void  OnPreRender(EventArgs e)
        
... {           
            Page.RegisterRequiresPostBack(
this);
            
base.OnPreRender(e);
        }
忽略了一句话带来了巨大的郁闷...


转载于:https://www.cnblogs.com/Tachikoma/archive/2007/11/01/946076.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值