asp.net – 使用ITemplate对自定义控件进行数据绑定
发布时间:2020-12-16 03:50:16 所属栏目:asp.Net 来源:网络整理
导读:这是我的自定义服务器控件的示例代码: [Designer(typeof(ContainerControlDesigner))][ToolboxData("{0}:BlocArrondi runat=serverContenuPrincipal/ContenuPrincipal/{0}:BlocArrondi")]public class BlocArrondi : WebControl{ private ITemplate _Conten
这是我的自定义服务器控件的示例代码:
[Designer(typeof(ContainerControlDesigner))] [ToolboxData("<{0}:BlocArrondi runat=server><ContenuPrincipal></ContenuPrincipal></{0}:BlocArrondi>")] public class BlocArrondi : WebControl { private ITemplate _ContenuPrincipal; protected Panel _PanelContenuPrincipal = new Panel(); public BlocArrondi() : base(HtmlTextWriterTag.Div) { } [PersistenceMode(PersistenceMode.InnerProperty)] [TemplateInstance(TemplateInstance.Single)] public ITemplate ContenuPrincipal { get { return _ContenuPrincipal; } set { _ContenuPrincipal = value; } } protected override void OnInit(EventArgs e) { base.OnInit(e); _PanelContenuPrincipal.ID = "PanelPrincipal"; this.Controls.Add(_PanelContenuPrincipal); if (_ContenuPrincipal != null) _ContenuPrincipal.InstantiateIn(_PanelContenuPrincipal); } } 在这里实施: <controls:BlocArrondi runat="server"> <ContenuPrincipal> <asp:Label id="LabelInfo" runat="server" /> </ContenuPrincipal> </controls:BlocArrondi> 我的标签LabelInfo可以在后面的代码上访问,太棒了! 但是,如果我在Repeater或ListView中使用我的自定义控件,我不能使用ContenuPrincipal模板中的Container.DataItem属性: <asp:Repeater id="RepeaterInfos" runat="server"> <ItemTemplate> <controls:BlocArrondi runat="server"> <ContenuPrincipal> <asp:Label runat="server" Text="<%# (Container.DataItem as MsgInfo).DisplayMessage() " /> </ContenuPrincipal> </controls:BlocArrondi> </ItemTemplate> </asp:Repeater> 错误消息:
如何在我的控件的ContenuPrincipal模板中使用Container.DataItem属性? 解决方法
我用自定义的TemplateContainer继承自IDataItemContainer解决了我的问题:
public class BlocArrondiContainer : Panel,IDataItemContainer 变化: protected Panel _PanelContenuPrincipal = new Panel(); [PersistenceMode(PersistenceMode.InnerProperty)] [TemplateInstance(TemplateInstance.Single)] public ITemplate ContenuPrincipal { get { return _ContenuPrincipal; } set { _ContenuPrincipal = value; } } 通过: protected BlocArrondiContainer _PanelContenuPrincipal = new BlocArrondiContainer (); [PersistenceMode(PersistenceMode.InnerProperty)] [TemplateInstance(TemplateInstance.Single)] [TemplateContainer(typeof(BlocArrondiContainer))] public ITemplate ContenuPrincipal { get { return _ContenuPrincipal; } set { _ContenuPrincipal = value; } } 重写BlocArrondi类上的OnDataBinding方法: protected override void OnDataBinding(System.EventArgs e) { if (NamingContainer is IDataItemContainer) _PanelContenuPrincipal.DataItem = (NamingContainer as IDataItemContainer).DataItem; base.OnDataBinding(e); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – VB.NET接口
- asp.net-mvc-4 – MVC脚手架 – 实现分页的快捷方式?
- .net – 使用FileStreamResult,MemoryStream是如何关闭的?
- asp.net-mvc-4 – LinkedIn在MVC4中使用DotNetOpenAuth的完
- asp.net – 空白WebResource.axd
- asp.net-mvc – asp.net mvc中HttpUnauthorizedResult上的默
- asp.net-mvc-4 – 根本无法使SignalR(asp.net mvc4)和requi
- asp.net-mvc – DiggBar如何工作?
- 单页应用认证
- asp.net – 使用“DataType.Upload”属性为属性生成文件上传
推荐文章
站长推荐
- 何时在ASP.NET管道中初始化会话状态
- asp.net – 在做TDD时如何最好地创建一个测试数据
- ASP.NET MVC 5中的Actionfilter注入
- asp.net-mvc – 如何在ASP.NET MVC中生成弹出页面
- asp.net-mvc – 如何在ASP.NET Web API中获取IpA
- Asp.NET Core+ABP框架+IdentityServer4+MySQL+Ex
- asp.net-mvc-3 – asp.net mvc的telerik grid的开
- asp.net-mvc – 每当我在MVC3中请求新页面时,都会
- asp.net-mvc – 在JS函数中使用T4MVC
- asp.net-mvc – ASP.Net MVC,动态属性和EditorFo
热点阅读