代码之家  ›  专栏  ›  技术社区  ›  Ryan

从ASP.NET web控件继承:“元素<名称>不是已知元素”

  •  5
  • Ryan  · 技术社区  · 17 年前

    我正在尝试创建一个自定义日历控件,该控件继承自ASP.Net的内置日历用户控件。

    我的控件的代码隐藏文件如下所示:

    public partial class WeeklyEventsCalendar : Calendar
    {
        protected void Page_Load(object sender, EventArgs e)
        {
    
        }
    }
    

    而且汇编得很好。

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="testbed.aspx.cs" Inherits="testbed" %>
    <%@ Register Src="UserControls/WeeklyEventsCalendar.ascx" TagName="WeeklyEventsCalendar"
        TagPrefix="mvs" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
        <title>Untitled Page</title>
        <link href="~/css/VitalSignsStyleSheet.css" type="text/css" rel="stylesheet" />
    </head>
    <body>
        <div>
            <mvs:WeeklyEventsCalendar runat="server" />
        </div>
    </body>
    </html>
    

    我得到一个警告 '元素WeeklyEventCalendar不是已知元素。如果网站中存在编译错误,或者web.config文件丢失,则可能会发生这种情况。” 企图

    我没有收到任何类型的“未找到文件”错误,就像我在过去错误地键入文件的位置一样。

    当我尝试在浏览器中加载aspx页面时,出现错误CS0115: “ASP.usercontrols\u weeklyeventscalendar\u ascx.FrameworkInitialize()”:找不到合适的方法进行重写

    这更让人困惑,因为在我的代码中,我没有尝试定义这样的函数。

    2 回复  |  直到 17 年前
        1
  •  5
  •   Bryant    17 年前

    我认为问题在于您试图从用户控件(基于您的ASCX扩展)继承日历控件(这是一个服务器控件)。你不能这样做。如果要从日历控件继承,则需要创建服务器控件。

    如果您需要一些示例代码,请告诉我。

        2
  •  4
  •   John Rudy    17 年前

    布莱恩特想到了。如果您所做的是定制现有控件,则将一个日历的实例嵌入到用户控件上,并从中公开您需要的属性。通过这种方式,用户控件可以处理所有必需的定制,并且只向消费应用程序提供有限的接口。(这是组合而不是继承。)

    如果确实需要完全从asp:Calendar派生,则需要创建从Calendar控件派生的标准类,然后执行自定义。但是,您将没有用于此目的的UI设计——您所做的一切都需要自定义代码。(如果需要更改发出的HTML,还需要写出这些自定义流——如果使用日历控件,这可能会很痛苦。)