用户控件没有名为ContentTemplate的公共属性。

10

这个问题之前已经被问过几十次,但从未得到解决。

我有一个UpdatePanel

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

然而在 Visual Studio (2010 (Professional (Windows (7 (Professional (64-bit)))))) 的 可视化页面设计器 显示以下错误:

创建控件错误 - UpdatePanelSetupToolbar

Type 'System.Web.UI.UserControl' does not have a public property named 'ContentTemplate'.

enter image description here
编辑:为了美观效果,漂亮的屏幕截图中添加了漂亮的颜色

严格来说,上述内容是正确的:UserControl 确实没有名为 ContentTemplate 的公共属性。

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

那么我该如何让 Visual Studio 知道我的 UpdatePanel 是一个 UpdatePanel

重要的附注

上面的代码实际上并不会失败:

<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)设计器会抱怨。

那么类型“%s”没有名为“%s”的公共属性。有什么问题吗?

系列

这个问题是Stackoverflow系列"Templating user controls"中的一个:


1
你是否曾经查看过ASP.NET生成的临时/中间文件,以查看构建的代码是否存在可能导致设计器问题的异常情况? - David W
我无法在Visual Studio 2012中重现。大多数支持数据绑定的控件已更新以允许强类型。我相信这种增强的副作用使这个问题消失了。http://www.asp.net/aspnet/overview/aspnet-and-visual-studio-2012/whats-new - Jamey
@KellyS.French 我会让你自己找出哪个解决方案可行。这个错误太恼人了,我再也无法忍受它了。不过,我会为修复它而付出一切的。 - Ian Boyd
2个回答

1
更新面板非常酷,但你不能用它来创建用户控件。好消息是,你可以按照与ajaxcontroltoolkit中使用的相同设计模式制作具有JavaScript有效负载的asp.net用户控件。我在2009年3月构建了这个工具,因为我需要一个不会阻塞UI的消息框。我遵循了使用ajaxcontroltoolkit的用户控件的设计模式。它具有完整的源代码,并且VS intelisense可用于JavaScript。它是一个用户控件,你只需将其放在页面上,它就会携带自己的JavaScript有效负载,你可以随心所欲地将其Ajax化。它甚至可以在数据重复器中无需修改即可使用。它实际上被接受为asp.net网站上的ajaxcontroltoolkit用户控件。它是免费的,如果你愿意,可以将它放在GitHub或其他存储库中。

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

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


0

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

将更新面板放在页面上,使用户控件不带更新面板。

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


如果你有一个没有UI的控件,比如我的情况下,我有一个控件,它将排除包含的内容被搜索,并且实际上没有可见的组件。它也不使用JavaScript。无论如何,当我尝试在自定义控件中包含一个开箱即用的控件时,我仍然会收到相同的错误。 - Kelly S. French

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接