从 ASP.NET Web 控件继承:"Element <name> is not a known element"



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

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

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

并且编译良好。

然而,当我试图将我的自定义控件放在aspx页面上时:

<%@ 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>

我收到警告"元素WeeklyEventsCalendar不是已知元素。如果网站中存在编译错误,或者web.config文件丢失,则可能会发生这种情况。"正在尝试

我没有收到任何类型的"找不到文件"的错误,就像我过去错误键入文件的位置时一样。

当我尝试在浏览器中加载aspx页面时,我收到错误CS0115:"ASP.usercontrols_weekleeventscalendar_ascx.FrameworkInitialize()":找不到合适的方法来覆盖

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

这应该非常简单。我哪里错了?

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

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

Bryant对此很感兴趣。如果您所做的只是自定义现有控件,那么您可能会考虑在用户控件上嵌入一个日历实例,并从中公开您需要的属性。这样,您的用户控件就可以处理所有必需的自定义,并且只为使用应用程序提供一个有限的接口。(这是组合而不是继承。)

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

相关内容

最新更新