ascx (用户控件) 可以做成容器形式么

madpc 2008-10-23 01:42:23
希望可以包含其它控件,请高手指点
...全文
179 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
jzywh 2008-10-24
  • 打赏
  • 举报
回复
Template确实是弱项
szh3210 2008-10-23
  • 打赏
  • 举报
回复
up
madpc 2008-10-23
  • 打赏
  • 举报
回复
结贴,顺便膜拜一下sp1234,向你学习
gjfizx 2008-10-23
  • 打赏
  • 举报
回复
mark
  • 打赏
  • 举报
回复
对! 大量使用masterpage或者自定义的模板布局,可以让web应用程序界面变得特别整洁一致,一看就是大公司的产品。用户的“试探”着就可以自己学会许多重要操作,问题操作细节方法完全一致。。
madpc 2008-10-23
  • 打赏
  • 举报
回复
才看到sp1234的,高,应该就是我要的东东了,试试先
btw, 我是因为不喜欢materpage才想到自已"发明"一个,现在才知道还有你说的这种方式
  • 打赏
  • 举报
回复
嗯,csdn上的提问者几乎都不了解模板技术(现在似乎对输出缓存技术的兴趣有些高了)。你能提出这个问题是很难得的。
madpc 2008-10-23
  • 打赏
  • 举报
回复
可是我在目的页上这样写会出错
<mycontrol:box>
<input type="text"/>
</mycontrol:box>
说这个控件不能包含内容
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 madpc 的回复:]
我是指在目地页上做为容器来使用

<mycontrol:box>
<input type="text"/>
</mycontrol:box>

比如box中有一个div
最终把input放在这个div中
[/Quote]

我的例子中,用户无需知道布局的table,只要设计两个模板中的界面就可以了。跟你的是一个意思。你的需求中,没有区分模板。而实际上应该这样写使用容器:

<uc1:TestContents ID="TestContents1" runat="server">
<内容>
<input type="text" />
</内容>
<广告>
hello,这是广告词
</广告>
</uc1:TestContents>
  • 打赏
  • 举报
回复
我写一个demo:

<%@ Control Language="C#" %>

<script runat="server">
[TemplateContainer(typeof(MyTemplateContainer))]
[PersistenceMode(PersistenceMode .InnerProperty)]
public ITemplate 内容 { get; set; }

[TemplateContainer(typeof(MyTemplateContainer))]
[PersistenceMode(PersistenceMode.InnerProperty)]
public ITemplate 广告 { get; set; }

public class MyTemplateContainer : Control, INamingContainer
{
public MyTemplateContainer(string ID)
{
this.ID = ID;
}
}

protected override void CreateChildControls()
{
base.CreateChildControls();
this.PlaceHolder1.Controls.Clear();
if (this.内容 != null)
{
MyTemplateContainer c = new MyTemplateContainer("content1");
this.内容.InstantiateIn(c);
this.PlaceHolder1.Controls.Add(c);
};
this.PlaceHolder2.Controls.Clear();
if (this.广告 != null)
{
MyTemplateContainer c = new MyTemplateContainer("content2");
this.广告.InstantiateIn(c);
this.PlaceHolder2.Controls.Add(c);
}
}
</script>

<table width="100%">
<tr>
<td>
内容:<br />
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
</td>
<td>
<asp:PlaceHolder ID="PlaceHolder2" runat="server"></asp:PlaceHolder>
</td>
</tr>
</table>


将这个ascx放入网站,然后“生成/编译 网站”。之后,你就可以在页面中拖入它使用。当你在类似于

<uc1:TestContents ID="TestContents1" runat="server">
</uc1:TestContents>

中间按“<"的时候,立刻看到智能感知显示两个模板供你使用。

masterpage只能让你为整个页面提供模板中内容,而自定义的用户控件则可以让你为用户控件中的小区域提供类似使用了mastpage的页面的同样的设计方式。这样,容器定义高层的布局设计,而将细节作为模板可以由使用者动态提供。
888228 2008-10-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 madpc 的回复:]
我是指在目地页上做为容器来使用

<mycontrol:box>
<input type="text"/>
</mycontrol:box>

比如box中有一个div
最终把input放在这个div中
[/Quote]


同样可以

你在控件中定义一个 public 就可以了。
然后在使用的时候将参数传入 / 传出
madpc 2008-10-23
  • 打赏
  • 举报
回复
我是指在目地页上做为容器来使用

<mycontrol:box>
<input type="text"/>
</mycontrol:box>

比如box中有一个div
最终把input放在这个div中
qinhl99 2008-10-23
  • 打赏
  • 举报
回复
本来就可以,还有其它问题吗?
jzywh 2008-10-23
  • 打赏
  • 举报
回复
ascx 本来就是个容器,可以包含其它控件阿!

62,067

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧