【问题标题】:Inheriting from an ASP.NET web control: "Element <name> is not a known element"从 ASP.NET Web 控件继承:“元素 <name> 不是已知元素”
【发布时间】:2010-09-16 08:15:11
【问题描述】:

我正在尝试创建一个继承自 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_weeklyeventscalendar_ascx.FrameworkInitialize()': no suitable method found to override

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

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

【问题讨论】:

  • 去掉Page_Load方法会发生什么?
  • 完全一样。好建议!

标签: c# asp.net inheritance user-controls


【解决方案1】:

科比一击即中。如果您正在做的只是自定义现有控件,您可能会考虑的一件事是在您的用户控件上嵌入日历实例并从中公开您需要的属性。通过这种方式,您的用户控件可以处理所有必要的自定义,并且只提供一个有限的接口返回到消费应用程序。 (这是组合而不是继承。)

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

【讨论】:

  • 感谢您如此彻底地概述了利弊。我会进一步研究,看看什么最适合我的需求。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-02
    • 2017-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    • 1970-01-01
    • 2017-05-07
    相关资源
    最近更新 更多