UserControl没有名为ContentTemplate的公共属性

时间:2012-07-25 18:55:14

标签: asp.net visual-studio-2010 visual-studio

此问题已被问过几十次;但从未解决过。

我有一个 UpdatePanel

<asp:UpdatePanel ID="UpdatePanelSetupToolbar" runat="server">
   <ContentTemplate>
      ...           
   </ContentTemplate>
</asp:UpdatePanel>      

但Visual Studio中的可视化页面设计器(2010(专业版(Windows(7(专业版(64位)))))会出错:

  

创建控件时出错 - UpdatePanelSetupToolbar

     

类型'System.Web.UI.UserControl'没有名为'ContentTemplate'的公共属性。

enter image description here
编辑:漂亮的截图中添加漂亮的颜色以获得更好的效果

现在,严格地说,这是真的:UserControl 有一个名为ContentTemplate的公共属性。

幸运的是,我的UpdatePanel UpdatePanel ,而确实有一个名为'ContentTemplate'的公共属性。

那么我如何说服Visual Studio我的UpdatePanelUpdatePanel

重要的附加说明

上面的代码实际上并没有失败:

<asp:UpdatePanel ID="UpdatePanelSetupToolbar" runat="server">
   <ContentTemplate>
      ...           
   </ContentTemplate>
</asp:UpdatePanel>  

只有在... ContentTemplate:

中有内容时才会失败
    <asp:UpdatePanel ID="UpdatePanelSetupToolbar" runat="server">
        <ContentTemplate>
            <Vista:Toolbar ID="ToolbarSetup" runat="server">
                <ContentTemplate>
                    <asp:LinkButton ID="bbSetupDays" ToolTip="Specify how many allocations will be available on these selected days"
                    OnClick="bbSetupDays_Click"                                        
                    runat="server">Setup Selected Days</asp:LinkButton>         
                </ContentTemplate>
            </Vista:Toolbar>        
        </ContentTemplate>
    </asp:UpdatePanel>      
  • 但Visual Studio并没有抱怨内部ToolbarSetup
  • 它抱怨外部UpdatePanelSetupToolbar控件

那么与

有什么关系
  

类型'%s'没有名为'%s'的公共属性。

不重要的附加说明

ASP.net网站编译,构建并运行精细。这只是抱怨的Visual Studio(2010)设计师。

那么与Type '%s' does not have a public property named '%s'.的交易是什么?

系列

这个问题是正在进行的Stackoverflow系列中的一个,“模板化用户控件”

2 个答案:

答案 0 :(得分:1)

更新面板非常酷,但你真的无法使用它进行用户控制。好消息是你可以通过遵循用于制作ajaxcontroltoolkit更新面板的相同设计模式来制作具有javascript有效负载的asp.net用户控件。

我在2009年3月建立了这个,因为我需要一个没有阻止ui的消息框。我使用ajaxcontroltoolkit跟踪usercontrols的设计模式。它有完整的源代码,VS intelisense可以在javascript上运行。这是一个用户控件,你只是放在页面上,它带有它自己的javascript有效负载,你可以ajaxify你的心脏内容。它甚至可以在没有修改的数据中继器中工作。它实际上被接受为asp.net网站上的ajaxcontroltoolkit用户控件。

如果你愿意,你可以将它放在github或其他存储库上。

http://gosylvester.com/downloads/messagebox.aspx

http://gosylvester.com/blog.aspx?id=55

答案 1 :(得分:0)

你应该按照设计解决这个问题。

将更新面板放在页面上,并在没有更新面板的情况下进行用户控制。

原因:更新面板旨在为您确实知道的异步回发自动生成客户端脚本。 用户控件是一个构建块,其中包含一个独立的功能,封装了复杂性,应该可以放置在任何地方而不需要上下文,在这种情况下,至少你需要在页面上实例化控件的脚本管理器。