如何在ASP.Net WebControl的“Content”内部属性​​中包含其他标记?

前端之家收集整理的这篇文章主要介绍了如何在ASP.Net WebControl的“Content”内部属性​​中包含其他标记?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
搜索了网站,我无法找到解决问题的方法,所以如果已经得到解答,我会道歉(我确定有人必须先问过这个问题).

我编写了一个jQuery Popup窗口,我将其打包为WebControl和IScriptControl.最后一步是能够在我的控件的标签内写入标记.我已经使用了InnerProperty属性几次,但仅用于包含强类型类的列表.

这是我在WebControl上的属性

@H_403_6@[PersistenceMode(PersistenceMode.InnerProperty)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public something??? Content { get { if (_content == null) { _content = new something???(); } return _content; } } private something??? _content;

这是我所追求的HTML标记

@H_403_6@<ctr:WebPopup runat="server" ID="win_Test" Hidden="false" Width="100px" Height="100px" Modal="true" WindowCaption="Test Window" CssClass="window"> <Content> <div style="display:none;"> <asp:Button runat="server" ID="Button1" OnClick="Button1_Click" /> </div> <%--Etc--%> <%--Etc--%> </Content> </ctr:WebPopup>

不幸的是我不知道我的Content属性应该是什么类型.我基本上需要复制UpdatePanel的ContentTemplate.

编辑:所以以下允许自动创建一个模板容器,但没有控件出现,我正在做什么是错的?

@H_403_6@[PersistenceMode(PersistenceMode.InnerProperty)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public ITemplate Content { get { return _content; } set { _content = value; } } private ITemplate _content;

EDIT2:覆盖CreateChildControls允许呈现ITemplate中的控件:

@H_403_6@protected override void CreateChildControls() { if (this.Content != null) { this.Controls.Clear(); this.Content.InstantiateIn(this); } base.CreateChildControls(); }

不幸的是,我现在无法从文件代码隐藏文件访问ITemplate中的控件.即如果我在我的标记内放一个按钮:

@H_403_6@<ctr:WebPopup runat="server" ID="win_StatusFilter"> <Content> <asp:Button runat="server" ID="btn_Test" Text="Cannot access this from code behind?" /> </Content> </ctr:WebPopup>

然后,我无法从后面的代码访问btn_Test:

@H_403_6@protected void Page_Load(object sender,EventArgs e) { btn_Test.Text = "btn_Test is not present in Intellisense and is not accessible to the page. It does,however,render correctly."; }

编辑3:固定!编辑2是正确的解决方案.只是Visual Studios 2010是臀部疼痛.关闭应用程序并重新打开它,并且可以在页面上访问Content属性中的所有控件.

编辑4:编辑2没有解决问题.在任何人提到它之前我已经尝试了[TemplateInstance(TemplateInstance.Single)]属性,但当时我并不认为它有所作为.看来Visual Studios 2010今天很奇怪.

由于我删除标签并继续工作,我认为该属性没有任何区别.由于回到代码AGAIN,控件已变得不可用.重新添加属性允许它全部工作,控件可以访问服务器端.疯狂.我将接受Brian的答案,因为他在其他人面前提到了这个问题.

解决方法

公共ITemplate内容

然后你渲染到UI,如:

@H_403_6@Label label = new Label(); this.Content.InstantiateIn(label); //Render label

编辑:确保模板也定义

@H_403_6@[TemplateInstance(TemplateInstance.Single)]

因为这允许您直接访问模板中的控件.

原文链接:https://www.f2er.com/aspnet/249325.html

猜你在找的asp.Net相关文章