una referencia que objeto not instancia example establecida error controlar asp.net webforms nullreferenceexception

asp.net - referencia - ASPNET WebForms Server Control es NULL en Page_Load



system nullreferenceexception sqlconnection (3)

Tengo una situación muy extraña en la que mi control Label es NULL en Page_Load. ¿Debería ser posible?

Tengo un formulario web:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="MyNamespace.Templates.Pages.WebForm1" %> <%@ Register TagPrefix="cw" Namespace="MyNamespace.Templates.Units" Assembly="MyNamespace" %> <!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 runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div style="background-color:yellowgreen;"> FIRST </div> <div style="background-color: wheat;"> SECOND <cw:ArticleColumn runat="server" ID="ac" ArticleID="1899"/> </div> </form> </body> </html>

En la carga de página del formulario web, simplemente hago una

if(!IsPostBack) DataBind();

El control de usuario ArticleColumn tiene este aspecto:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ArticleColumn.ascx.cs" Inherits="MyNamespace.Templates.Units.ArticleColumn" %> <h2><asp:Label runat="server" ID="myArticleHeading" Text="TOM" /></h2> <p><asp:Label runat="server" ID="myArticleIntro" Text="TOM" /></p> <asp:Label runat="server" ID="myArticleBody" Text="TOM" />

Y el código detrás se ve así:

public partial class ArticleColumn : UserControlBase<PageTypes.ArticleBase> { public int ArticleID { get; set; } protected void Page_Load(object sender, EventArgs e) { var page = DataFactory.Instance.GetPage(new PageReference(ArticleID)); myArticleHeading.Text = page.PageName; myArticleIntro.Text = page.Property["IntroText"] != null ? page.Property["IntroText"].ToWebString() : string.Empty; myArticleBody.Text = page.Property["MainBody"] != null ? page.Property["MainBody"].ToWebString() : string.Empty; DataBind(); } }

Falla cuando intento establecer myArticleHeading.Text porque el control es nulo. Como es esto posible? El enlace automático de controles de ASP.NET debe haber fallado de alguna manera ...

He intentado: - Reiniciar VS 2010 - Cambiar configuraciones de compilación - Limpiar / Reconstruir - Cambiar nombres de controles para que el archivo del diseñador se actualice.

No hace falta decir que ninguno de los anteriores funcionó.

Edición: seguimiento de la pila agregada:

[NullReferenceException: Object reference not set to an instance of an object.] MyNamespace.Templates.Units.ArticleColumn.Page_Load(Object sender, EventArgs e) in C:/DevProjects/CustomerWeb/Main/Source/MyNamespace/Templates/Units/ArticleColumn.ascx.cs:21 System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35 System.Web.UI.Control.OnLoad(EventArgs e) +91 System.Web.UI.Control.LoadRecursive() +74 System.Web.UI.Control.LoadRecursive() +146 System.Web.UI.Control.LoadRecursive() +146 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2207

Solución: acabo de encontrar la respuesta a mí mismo. El uso de esta declaración para el control de usuario en la página solucionó el problema:

<%@ Register TagPrefix="cw" TagName="ArticleColumn" Src="~/Templates/Units/ArticleColumn.ascx" %>

Esta declaración defectuosa se agregó usando el menú de clic derecho de ReSharper desde la vista html:

<%@ Register TagPrefix="cw" Namespace="MyNamespace.Templates.Units" Assembly="MyNamespace" %>

¡Gracias por la ayuda! :)


Actualiza el contenido del control de usuario desde la página.

Declare las propiedades en el control de usuario para actualizar el contenido de las etiquetas y use esas propiedades de la página con la instancia de control de usuario.


DataBind es algo para vincular los controles escritos en la parte aspx con el script del lado del servidor, es decir, <%%>.

Pero su escenario no requiere llamar a databind (). Solo asignando los valores a los controles debería funcionar bien.

Intenta eliminando databind de tu código.


Respondí mi propia pregunta de arriba.

Solución: acabo de encontrar la respuesta a mí mismo. El uso de esta declaración para el control de usuario en la página solucionó el problema:

<%@ Register TagPrefix="cw" TagName="ArticleColumn" Src="~/Templates/Units/ArticleColumn.ascx" %>

Esta declaración defectuosa se agregó usando el menú de clic derecho de ReSharper desde la vista html:

<%@ Register TagPrefix="cw" Namespace="MyNamespace.Templates.Units" Assembly="MyNamespace" %>

¡Gracias por la ayuda! :)