2011-06-14 87 views
0

我已经看到了所有常见页面,其中包含有关如何创建允许用户控件中的内容的子标记的信息(使用ITemplate和作INamingContainer),但我还没有看到任何人都能够添加成为属性的属性说的标签,例如:如何在ASP.Net中将属性/属性添加到HTML标记容器标记中

<asp:MyControl runat="server" ID="myControlTest" SomeAttribute="SomeValue"> 
    <Content ContentAttribute="Something"> 
     <a href="SomePage.aspx" alt="Blah">Blah</a> 
    </Content> 
</asp:MyControl> 

如果你看到在内容标签的ContentAttribute,就是想什么我是能够实现,但是如果我使用ITemplate和INamingContainer等设置它,我可以添加一个实际上出现在该标记的Intellisense中的属性,但是当我运行代码时,它说内容没有名为ContentAttribute的属性/属性(它也给了山姆e作为VS IDE中的警告,但仍然允许我编译它)。

我已经尝试了一切,使这项工作,迄今唯一的方法似乎是如果我MyControl的Content属性从System.Web.UI.Control继承并实现ITemplate的类。这很有效,但不幸的是我必须在Content标签中指定runat属性(因为它将它视为控件而不是子标签),我宁愿不这样做,如果可能的话。

希望我已经解释得很好,如果我没有请让我知道,我会尽我所能进一步阐述。

在此先感谢。

回答

1

我认为你所提出的就像是一个MIME电子邮件,其中有可变数量的部分,每个部分都有一个标识符供客户端选择它可以处理的最佳电子邮件版本。我假设你想在运行时根据该属性选择合适的模板。

就我所知,标准的.NET控件并没有以这种方式实现。认为其具有的Repeater:

<asp:Repeater id="myRepeater" runat="server"> 
    <HeaderTemplate>...</HeaderTemplate> 
    <ItemTemplate>...</ItemTemplate> 
    <FooterTemplate>...</FooterTemplate> 
</asp:Repeater> 

每个子项(模板)的具有不同的名称,而不是与一个单独的属性相同的名称。

是否有任何方法可以提前定义所有可能的区段,中继器的工作方式?

<asp:MyControl runat="server" ID="myCtlTest">        
    <SomethingTemplate><a href="SomePage.aspx" alt="Blah">Blah</a></SomethingTemplate> 
    <OtherTemplate><a href="OtherPage.aspx" alt="Blah">Blah</a></OtherTemplate> 
</asp:MyControl> 

我猜测不是,而是想扔掉那里万一。

或者,ContentAttribute可以移动到MyControl吗? SETter会根据这个值为你加载/建立模板。

<asp:MyControl runat="server" ID="myCtlTest" ContentAttribute="Something"> 
    <Template></Template>       
</asp:MyControl> 

...或者它可以使用方法而不是使用属性SETter加载。

如果您总是需要多个模板,也许这两个概念的组合会有所帮助。

<asp:MyControl runat="server" ID="myControlTest" 
       SomethingTemplate="Something" 
       OtherTemplate="Other"> 
    <SomethingTemplate></SomethingTemplate>       
    <OtherTemplate></OtherTemplate>       
</asp:MyControl> 
+0

嗨史蒂夫,感谢您的建议 - 绝对有很多我没有考虑在那里,他们是非常好的建议。关于你是否事先知道这些部分的问题,我会,但我不知道这些部分的内容。我可以将属性放在父标签上,但是我失去了逻辑,因为在父项上拥有这样的属性似乎很奇怪,而且我想让内容标签成为一个我可以在多个用户控件中使用的通用类,因此我必须将这些属性添加到使用此通用内容标记的每个控件。 – Anupheaus 2011-06-14 14:00:49

相关问题