2012-01-09 13 views
6

Edición:
tengo un margen de beneficio como esto (sólo las líneas importantes):ASP/C# código subyacente no puede alcanzar el control del marcado

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="RTDeluxe.ascx.cs" 
Inherits="MainSolution.CONTROLTEMPLATES.Kunde.RTDeluxe" %> 
<ul id="linkUl" class="teaserLinksUL" runat="server"/> 

El código subyacente:

namespace MainSolution.CONTROLTEMPLATES.Kunde 
public partial class RTDeluxe : UserControl 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     linkUl.InnerHtml = string.Empty; 
    } 
} 

Puedo acceder al ul dentro del código subyacente y no obtener ningún error de compilación. Pero, cuando depuro el código obtengo un NullReferenceException porque linkUl es NULL.

Primero pensé que los espacios de nombres son la razón. Pero, después de varios intentos, estoy seguro de que son correctos. El FileLocation parece ser correcto y la carpeta controltemplates de mi iis tiene una carpeta "Kunde" con los correspondientes archivos ascx.

Tengo otros archivos .ascx con la misma estructura -> funcionan como un amuleto.

Pregunta:
¿Hay otras razones que el espacio de nombres para tal comportamiento? ¿Tienes alguna pista donde pueda mirar?

Editar:
El archivo existe RTDeluxe.ascx.designer.cs, la linkUl generada tiene el siguiente aspecto:

protected global::System.Web.UI.HtmlControls.HtmlGenericControl linkUl; 

Edit2:
Ok, voy a tratar de responder a todas sus preguntas Gracias por su tiempo y comentarios!

  1. He reiniciado Visual Studio -> El problema persiste.
  2. También he limpiado la solución y he implementado una nueva. -> El problema persiste.
  3. Cuando depuro y verifico la jerarquía de control, puedo ver que la etiqueta NO está allí.
  4. Cuando cambio el ID, el compilador arroja un error en el código subyacente (que es el correcto). Si cambio la identificación allí, obtengo el mismo comportamiento que antes.
  5. También reinicié mi IIS y toda la pc -> Sin cambios.
  6. He agregado un atributo Name a la definición de linkul -> Sin cambios.
  7. Cuando intento usar FindControl, devuelve NULL.
  8. El target-framework es .NET 3.5
  9. El linkul NO está dentro de un repetidor o cualquier otro control.
  10. La eliminación/cambio de web.config tampoco conduce a una solución.
  11. Agregar EnsureChildControls antes de acceder al linkUl no cambia nada.
  12. Mover el código a Page_PreRender tampoco funciona.

Voy a probar sus sugerencias que no figuran aquí y añadirlas pronto.

Edit3:
Aquí el marcado completo:

<%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %> 
<%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> 
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="RTDeluxe.ascx.cs" Inherits="MainSolution.CONTROLTEMPLATES.Kunde.RTDeluxe" %> 

<ul id="linkUl" class="teaserLinksUL" runat="server"/> 

* Edit4:
autorización aquí algo de información adicional que descubrí: Cuando cambio algo en el margen de beneficio, como la adición de llanura html text NO es reconocido ni mostrado en el navegador. Cuando hago algo como esto:

Label label1 = new Label(); 
    label1.Text = "hugo lives!"; 
    Controls.Add(label1); 

Se muestra. Parece que en el estudio visual todo está bien ... Pero "en vivo" en el servidor el código subyacente habla de un marcado extraño ...

+0

¿Puede mostrar la definición generada por el compilador para linkUl? –

+0

¿tiene el archivo RTDeluxe.designer.cs? – giammin

+0

@giammin sí, he editado la pregunta. –

Respuesta

1

Esto podría ayudar a Usted un poco:

En el archivo de código subyacente del control del usuario a nivel de clase, agregue este código:

protected global::System.Web.UI.HtmlControls.HtmlGenericControl linkUl = new System.Web.UI.HtmlControls.HtmlGenericControl(); 

y eliminar el archivo protected global::System.Web.UI.HtmlControls.HtmlGenericControl linkUl; de RTDeluxe.ascx.designer.cs

Puede ser porque su objeto acaba de declararse no creado. Espero que esto ayude ...

0

¿Ha intentado llamar al EnsureChildControls antes de acceder al control o mover el código a OnPreRender?

+0

gracias por las sugerencias :) probé las dos, desafortunadamente no cambia el comportamiento :( –

+0

Bastante seguro de que EnsureChildControls no se asegura de que el método CreateChildControls solo se llame una vez. La página no lo reemplaza por defecto y Control tiene un método abstracto vacío . –

0

He tenido un problema similar a este antes en un archivo .aspx. Fue causada por tener optimizeComptions establecido en verdadero en mi archivo web.config.

<system.web> 
    <compilation optimizeCompilations="true" /> 
</system.web> 

Cuando optimizeCompilations se establece en true ASP.Net sólo se reconstruyen las páginas cuando se siente que es necesario. A veces se confunde y no se da cuenta de que ha realizado un cambio que necesita una reconstrucción de página que da como resultado un error en tiempo de ejecución que el compilador no detecta. Consulte aquí para obtener más información acerca de esta configuración http://msdn.microsoft.com/en-us/library/ms366723.aspx.

Para solucionar el problema tuve que establecer temporalmente optimizeCompilations en falso, reconstruir mi sitio web, reciclar mi grupo de aplicaciones y luego volver a establecerlo en true.

Espero que esto ayude.

0

A veces, en situaciones como esta, es posible que Visual Studio haya empezado mal con respecto a este archivo. Descubrí que eliminar los archivos y volver a crearlos a menudo resolverá el problema. Asegúrese de copiar el código en alguna parte para poder pegarlo nuevamente en los archivos recién creados.

0

¿Se está implementando utilizando la funcionalidad de publicación visual studio? Si es así, intente eliminar el archivo .ascx en su servidor de destino. He tenido Visual Studio no reconoce que el archivo ha cambiado y luego no copia el nuevo archivo.

Cuestiones relacionadas