2011-02-22 28 views
5

He creado una clase en C# dentro de una biblioteca de clases y he agregado este control a default.aspx, pero mi código no activa el evento page_load. Aquí está el código:Page_Load no se activa en UserControl

¿Qué hago mal?

La página carga pero no muestra la etiqueta en la página. He agregado el control a la página correctamente sin ningún error. He añadido un evento con la etiqueta de registro allí.

etiqueta html: <RandoIntegerControls:RandomIntegerControl ID="RandomIntegerControl1" runat="server"></RandoIntegerControls:RandomIntegerControl>

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Web.UI.WebControls; 

namespace CSIMedia.WebControls 
{ 

    public class RandomIntegerControl : PlaceHolder 
    { 

    private Label _Label; 


    public RandomIntegerControl() 
    { 

    } 

    private void Page_Load(Object sender, EventArgs e) 
    { 

     this._Label = new Label(); 
     this.Controls.Add(this._Label); 
     this._Label.Text = "Enter random values:"; 

    } 

    } 
} 

página Default.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 
<%@ Register TagPrefix="RandoIntegerControls" Assembly="CSIMedia.WebControls" Namespace="CSIMedia.WebControls"%> 
<!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></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <RandoIntegerControls:RandomIntegerControl ID="RandomIntegerControl1" runat="server"></RandoIntegerControls:RandomIntegerControl> 
    </div> 
    </form> 
</body> 
</html> 
+0

¿Incluyó el archivo .ascx de su control personalizado en el archivo aspx que lo usa? – skaz

+0

no lo eliminé. No he creado archivos ascx. He creado esta clase como un archivo class.cs y acabo de agregar esta clase de control a la página. pero he agregado la página default.aspx y todavía no tengo suerte. – redoc01

+0

¿Puedes mostrar el código donde agregaste el control a la página? – skaz

Respuesta

2

Usted está heredando de marcador de posición, que es un control Web y no controlará el evento Load. Solo User Controls (.ascx) podrá manejar ese evento implícitamente.

Por la apariencia del código que publicaste, probablemente sería mejor usar un UserControl, o si lo necesitas reutilizable en varios proyectos, crea un Web Control desde cero.

+0

@clint ¿no es eso lo que he hecho, creado un webcontrol desde cero? ¿Quieres decir que necesito heredar del control web para que page_load se active? – redoc01

+0

No, para crear un control web desde cero, debe heredar de Web Control y anular los métodos relacionados para crear el control. Heredar de PlaceHolder significa que la funcionalidad ya se ha llevado a cabo. – Clint

+0

¿Qué es lo que se te ha pedido que hagas exactamente? – Clint

8

Prueba esto:

public RandomIntegerControl() 
{ 
    this.Load += Page_Load; 
} 

En las páginas (y los controles de usuario), el método Load depende normalmente de forma automática gracias a este atributo:

<%@ Page ... AutoEventWireup="true" ... %>

Si usted no tiene una archivo aspx/ascx, no va a suceder automáticamente, pero aún puede conectarlo manualmente con el código anterior.

+0

cuando convierto este código en vb.net, todo funciona bien. Soy un desarrollador de VB.Net pero me han pedido que use C# para un proyecto de prueba en un rol que solicité, ¿cuál es la mejor manera de solucionar esto rápidamente para poder hacer el examen rápidamente? – redoc01

+0

Lo siento, no estoy seguro de entender la pregunta. El código que escribí es C#, ¿estás pidiendo una versión de VB? –

+0

Impresionante, funcionó para mí perfectamente gracias Xavier :) – timothyclifford

0

Resulta que puede anular Page_Load en el archivo de marcado aspx. Ese archivo hereda del archivo base.

<%@ Control Language="C#" AutoEventWireup="true" 
    CodeBehind="TestUserControl.ascx.cs" Inherits="TestUserControl" %> 

Ejemplo para anular:

<script language="C#" runat="server"> 
    public void Page_Load(object sender, EventArgs e) 
    { 
     ... 
    } 
</script> 

Esta función anula la versión de código subyacente.

Cuestiones relacionadas