2008-10-09 17 views
5

Sto tentando di creare un controllo di calendario personalizzato che eredita dal controllo utente del calendario incorporato di ASP.Net.Ereditato da un controllo Web ASP.NET: "Elemento <name> non è un elemento noto"

il file code-behind per il mio controllo è simile al seguente:

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

    } 
} 

e compila bene.

Tuttavia, quando cerco di mettere il mio controllo personalizzato in una pagina 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> 

Ho ricevuto un avviso 'elemento WeeklyEventsCalendar non è un elemento conosciuto. Questo può accadere se c'è un errore di compilazione nel sito web o il file web.config è mancante. ' Tentativo

Non riesco a ottenere alcun tipo di errore "file non trovato" come in passato quando ho digitato male il percorso del file.

Quando si tenta di caricare la pagina aspx in un browser, ottengo l'errore CS0115: 'ASP.usercontrols_weeklyeventscalendar_ascx.FrameworkInitialize()': nessun metodo adeguato trovato per ignorare

che è ancora più confusa, perché da nessuna parte nel mio codice cerco di definire una funzione del genere.

Questo dovrebbe essere davvero semplice. Dove sto andando male?

+0

Cosa succede quando si estrae il metodo Page_Load ? –

+0

Esattamente la stessa cosa. Buon suggerimento però! – Ryan

risposta

4

Bryant ci ha colpito. Una cosa che potresti considerare se tutto ciò che stai facendo è personalizzare il controllo esistente è incorporare un'istanza del calendario sul controllo utente ed esporre le proprietà di cui hai bisogno. In questo modo il controllo utente è in grado di gestire tutte le personalizzazioni richieste e fornisce anche un'interfaccia limitata all'applicazione che consuma. (Questa è la composizione anziché l'ereditarietà.)

Se è davvero necessario derivare completamente da asp: Calendar, è necessario creare una classe standard che deriva dal controllo Calendar e quindi eseguire le personalizzazioni. Tuttavia, non avrai una progettazione dell'interfaccia utente, tuttavia, tutto ciò che fai dovrà essere un codice personalizzato. (E se hai bisogno di cambiare l'HTML emesso, dovrai scrivere anche quei flussi personalizzati - il che, con un controllo del calendario, potrebbe essere doloroso.)

+0

grazie per aver descritto i pro ei contro in modo così approfondito. Approfondirò ulteriormente e vedrò quello che si adatta meglio alle mie esigenze. – Ryan

5

Penso che il problema è che si sta tentando di ereditare il controllo Calendar (che è un controllo server) da un controllo utente (basato sulla propria estensione ASCX). Non puoi farlo. Se si desidera ereditare dal controllo Calendar, è necessario creare un controllo server.

Fammi sapere se è necessario un codice di esempio.

+0

Il codice di esempio sarebbe carino. –