2008-10-09 12 views
5

Estoy intentando crear un control de calendario personalizado que herede del control de usuario de calendario incorporado de ASP.Net.Hereda de un control web ASP.NET: "Elemento <name> no es un elemento conocido"

el archivo de código subyacente de mi control es el siguiente:

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

    } 
} 

y compila bien.

Sin embargo, cuando intento poner mi control personalizado en una página 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> 

recibo una advertencia 'Elemento WeeklyEventsCalendar no es un elemento conocido. Esto puede ocurrir si hay un error de compilación en el sitio web o si falta el archivo web.config. ' Intento de

No obtengo ningún tipo de error de "archivo no encontrado" como lo he hecho en el pasado cuando escribí mal la ubicación del archivo.

Cuando intento cargar la página aspx en un navegador, recibo CS0115 de error: 'ASP.usercontrols_weeklyeventscalendar_ascx.FrameworkInitialize()': ningún método adecuado para anular encontrado

que es aún más confuso, porque en ninguna parte en mi código intento definir tal función.

Esto debería ser realmente simple. ¿Dónde estoy equivocado?

+0

¿Qué sucede cuando saca el método Page_Load? ? –

+0

Exactamente lo mismo. ¡Buena sugerencia! – Ryan

Respuesta

4

Bryant golpeó en él. Una cosa que podría considerar si todo lo que está haciendo es personalizar el control existente es incrustar una instancia del calendario en su control de usuario y exponer las propiedades que necesita de él. De esta forma, su control de usuario puede manejar todas las personalizaciones requeridas y también proporcionar solo una interfaz limitada de vuelta a la aplicación consumidora. (Esto es composición en lugar de herencia.)

Si realmente necesita derivar completamente de asp: Calendar, necesita crear una clase estándar que se deriva del control Calendar y luego realizar sus personalizaciones. No tendrá un diseño de interfaz de usuario para eso; sin embargo, todo lo que haga deberá ser un código personalizado. (Y si necesita cambiar el código HTML que se emite, deberá escribir esos flujos personalizados también, lo cual, con un control de calendario, podría ser doloroso).

+0

gracias por delinear los pros y los contras tan a fondo. Investigaré más sobre esto y veré qué se ajusta mejor a mis necesidades. – Ryan

5

Creo que el problema es que está intentando heredar el control Calendar (que es un control de servidor) desde un control de usuario (basado en su extensión ASCX). No puedes hacer esto. Si desea heredar desde el control Calendar, entonces necesita crear un control de servidor.

Avíseme si necesita un código de muestra.

+0

El código de muestra sería bueno. –

Cuestiones relacionadas