2008-10-09 84 views
5

我试图创建一个自定义日历控件,该控件从ASP.Net的内置日历用户控件中继承。从ASP.NET Web控件继承:“元素<name>不是已知元素”

我的控件的代码隐藏文件看起来是这样的:

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()”:发现覆盖

没有合适的方法,它是更加混乱,因为无处在我的代码中,我试图定义这样的功能。

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

+0

将Page_Load方法取出后会发生什么? – 2008-10-09 17:36:50

+0

完全一样的东西。好的建议,但! – Ryan 2008-10-09 17:39:40

回答

4

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

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

5

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

让我知道你是否需要一些示例代码。

+0

示例代码会很好。 – 2009-06-09 18:01:37