c# - net - Todos los controles son nulos dentro de usercontrol.
update mysql asp net c# (4)
Tengo un UserControl que utiliza un UserControl, entre otros controles.
En el archivo ascx
tengo el siguiente código:
<%@ Register TagPrefix="tag" Namespace="some.name.space" Assembly="some.assembly" %>
<tag:control ID="test" runat="server" />
En mi método Page_Load
, trato de establecer una propiedad en prueba como:
test.Text = "Hello World!";
Esto realmente establece la propiedad de Texto de un control literal en mi test
control de usuario.
Esto lanza una excepción:
Referencia a objeto no establecida como instancia de un objeto
Cuando intenta configurar el
lblTest.Text = value;
El objeto que es nulo es lblTest
.
¿No estoy agregando el control de usuario correctamente? ¿Debo, o tengo que, especificar la propiedad Src
al registrar una etiqueta? Si es así, ¿tendría que registrar cada control de usuario que uso?
Esto también hace que no se carguen controles en el control de usuario y todos los controles están nulos dentro del control de usuario.
El problema aquí suele deberse a la mecánica de carga de los controles de usuario, que normalmente se cargan después de la página. Entonces, como resultado, los controles aún no se han inicializado en su control de usuario (causando la referencia nula) durante el método que contiene page_load. Una forma de solucionar esto es simplemente crear y establecer una propiedad en el control de usuario y hacer que el control de usuario / rellene su propia interfaz de usuario en su método de carga de página.
Algo como esto:
//Page
protected void Page_Load(object sender, EventArgs e)
{
test.Text = "Hello World!";
}
//User Control
public string Text {get; set;}
protected void Page_Load(object sender, EventArgs e)
{
lblTest.Text = Text;
}
Por favor, trate de poner el código en el evento Page_prerender de la página. Funcionará para usted.
Si el control del usuario está en su proyecto actual, entonces debe incluir el src en la declaración de registro:
<%@ Register TagPrefix="uc1" TagName="NavTop" Src="controls/NavTop.ascx" %>
Sin embargo, si utiliza este control de usuario en más de una página, también puede registrarlo en web.config:
<system.web>
<pages>
<controls>
<add tagPrefix="uc1" tagName="NavTop" src="~/controls/NavTop.ascx" />
</controls>
</pages>
</system.web>
Otra cosa a tener en cuenta: hay ocasiones en que el diseñador de visual studio no "ve" sus cambios en los controles de la página si solo realiza los cambios en la vista de origen. Si cambia un nombre de control, por ejemplo, podría terminar con un control con el nuevo nombre en el ascx pero una referencia a un control con el nombre antiguo en el archivo del diseñador. En tiempo de ejecución, esto dará como resultado que la propiedad del archivo del diseñador sea nula.
Después de haber sido quemado por esto varias veces, si realizo algún cambio en la vista de origen, verifico que el archivo del diseñador se haya actualizado correctamente o cambie a la vista de diseño, haga un cambio menor y luego guarde la página / control de usuario.
Tuve este problema cuando estaba agregando un control de usuario en el código detrás de la forma incorrecta. Debe utilizar el método Page.LoadControl para inicializar el control que no puede usar simplemente nuevo.
//WRONG
UserControls.BingoCardPage bcp = new UserControls.BingoCardPage();
form1.Controls.Add(bcp);
//RIGHT
UserControls.BingoCardPage bcp = (UserControls.BingoCardPage)Page.LoadControl("~/UserControls/BingoCardPage.ascx");
form1.Controls.Add(bcp);