2008-10-09 74 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