Asp.net webform中使用LoadControl 和LoadTemplate的区别
这个内容放在今天这个时间点,显得有点无用,不过只是做一个记录吧。
最近需要修改比较旧的一 个系统,需要实现动态DataGrid列的绑定的功能。
其中有一列需要用到一个自己的Label,外加系统的其它用户控件。
一开始在自定义的Itemplate中,New一个用户控件类的,发现没有用,数据都执行了,但是没有数据出现在页面上。
后来发现需要使用LoadControl来动态加载,但发现这东西只出现在最后一行中才会有数据。据有人说是缓存的问题。具体没有去研究。
本来想绕过这个自定义控件的,但是页面中这个控件需要JS打开一个新窗口,传递的参数比较复杂,如果直接传入,需要转码,而转码在后端和前端有时候会不好控制,或者太过麻烦,后来想还是定义使用已经成熟的控件去实现更好一些。
后来查到了LoadTemplate这个方法,其实两者之间是有一 些比较细的差别的,最主要的意思是,LoadTemplate加载的只是模版,不会立马初始化,并设置模版内控件没有BindingContainer属性(使用的是所属Container,如DataGrid的数据源做为绑定数据源),绑定数据的时候,数据源会传给模版中的Container.DataItem属性,来表示当前行,而LoadControl会初始化该控件内的对象控件实例,绑定的时候,Container.DataItem指的是用户控件本身的DataItem属性 ,这有可能是不存在的,也就是说,在绑定的时候Container指向不同:
LoadControl BindingContainer --> UserControl's DataSource
LoadTemplate BindingContainer --> Template Container's DataSource