如何在ASP.Net WebControl的“Content”内部属性中包含其他标记?
|
我搜索了网站,我无法找到解决问题的方法,所以如果已经得到解答,我会道歉(我确定有人必须先问过这个问题). 我编写了一个jQuery Popup窗口,我将其打包为WebControl和IScriptControl.最后一步是能够在我的控件的标签内写入标记.我已经使用了InnerProperty属性几次,但仅用于包含强类型类的列表. 这是我在WebControl上的属性: [PersistenceMode(PersistenceMode.InnerProperty)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public something??? Content
{
get
{
if (_content == null)
{
_content = new something???();
}
return _content;
}
}
private something??? _content;
这是我所追求的HTML标记: <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. 编辑:所以以下允许自动创建一个模板容器,但没有控件出现,我正在做什么是错的? [PersistenceMode(PersistenceMode.InnerProperty)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public ITemplate Content
{
get
{
return _content;
}
set
{
_content = value;
}
}
private ITemplate _content;
EDIT2:覆盖CreateChildControls允许呈现ITemplate中的控件: protected override void CreateChildControls()
{
if (this.Content != null)
{
this.Controls.Clear();
this.Content.InstantiateIn(this);
}
base.CreateChildControls();
}
不幸的是,我现在无法从文件的代码隐藏文件访问ITemplate中的控件.即如果我在我的标记内放一个按钮: <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: 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,如: Label label = new Label(); this.Content.InstantiateIn(label); //Render label 编辑:确保模板也定义 [TemplateInstance(TemplateInstance.Single)] 因为这允许您直接访问模板中的控件. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ASP.NET MVC和SQL Server报告服务
- asp.net-mvc – MVC 6:如何使用RESX文件?
- asp.net – 未知的服务器标签’ajaxToolkit:CalendarExten
- asp.net-mvc – 用于MVC文件上传的Bootstrap进度条
- asp.net – MSBuild / WebDeploy – 如何防止它删除文件夹及
- ASP.NET 5/ASP.NET Core中的关注点和n层架构的分离1
- asp.net-mvc – 获取文件夹中的文件
- asp.net – 配置IIS以返回404以进行目录浏览尝试
- 验证 – Asp.Net MVC:子请求的执行失败.请查看InnerExcept
- asp.net-mvc – 将默认日期格式应用于ASP.NET MVC 3应用程序
