【问题标题】:UserControl does not have public property named ContentTemplateUserControl 没有名为 ContentTemplate 的公共属性
【发布时间】:2012-07-24 07:00:57
【问题描述】:

这个问题之前已经被问过几十次了;但一直没有解决。

我有一个UpdatePanel

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

但是 Visual Studio (2010 (Professional (Windows (7 (Professional (64-bit))))) 中的可视化页面设计器给出了错误:

创建控件时出错 - UpdatePanelSetupToolbar

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


编辑:在漂亮的截图中添加漂亮的颜色以获得漂亮的效果

现在,严格来说,这是真的: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 系列中的一个,“模板化用户控件”

【问题讨论】:

  • 您是否曾经查看过 ASP.NET 生成的临时/中间文件,以查看所构建的代码是否存在任何可能导致设计器问题的异常?
  • 我无法在 Visual Studio 2012 中重现。大多数支持数据绑定的控件都已更新为允许强类型化。我相信这种增强的副作用使这个问题消失了。 asp.net/aspnet/overview/aspnet-and-visual-studio-2012/whats-new
  • @KellyS.French 我会留给你找出哪种解决方案有效。这个bug太严重了,我不能再看它了。不过,我会杀了一个修复。

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


【解决方案1】:

你应该根据设计解决这个问题。

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

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

【讨论】:

  • 如果你有一个没有 UI 的控件,在我的例子中,我有一个控件,它将排除包含的内容被搜索并且实际上没有可见的组件。它也不使用 JavaScript。无论如何,当我尝试在我的自定义控件中包含一个现成的控件时,我仍然会遇到同样的错误。
【解决方案2】:

更新面板真的很酷,但你真的不能用它来控制用户。好消息是您可以按照用于为 ajaxcontroltoolkit 制作更新面板的相同设计模式制作具有 javascript 负载的 asp.net 用户控件。

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

它是免费的,如果你愿意,你可以把它放在 github 或其他存储库上。

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

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

【讨论】:

    猜你喜欢
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多