Problema:
Ho un markup come questo (solo le linee importanti):ASP/C# codice dietro non riesce a raggiungere il controllo di markup
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="RTDeluxe.ascx.cs"
Inherits="MainSolution.CONTROLTEMPLATES.Kunde.RTDeluxe" %>
<ul id="linkUl" class="teaserLinksUL" runat="server"/>
Il code-behind:
namespace MainSolution.CONTROLTEMPLATES.Kunde
public partial class RTDeluxe : UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
linkUl.InnerHtml = string.Empty;
}
}
Posso accedere allo ul
all'interno del code-behind e non ottenere alcun errore di compilazione. Ma quando eseguo il debug del codice ottengo un NullReferenceException
perché linkUl
è NULL.
Prima ho pensato che gli spazi dei nomi sono la ragione. Ma dopo diversi tentativi, sono sicuro che siano corretti. Il FileLocation
sembra essere corretto e la cartella controltemplates
del mio iis ha una cartella "Kunde" con i file ascx corrispondenti al suo interno.
Ho altri file .ascx con la stessa struttura -> funzionano come un incantesimo.
Domanda:
Ci sono altri motivi che lo spazio dei nomi per tale comportamento? Hai qualche suggerimento su dove posso guardare?
Edit:
Il file esiste RTDeluxe.ascx.designer.cs, generato linkUl
assomiglia a questo:
protected global::System.Web.UI.HtmlControls.HtmlGenericControl linkUl;
Edit2:
Ok, cercherò di rispondere a tutte le vostre domande. Grazie per il tuo tempo e feedback!
- Ho riavviato Visual Studio -> Il problema persiste.
- Ho anche ripulito la soluzione e ne ho distribuita una nuova. -> Il problema persiste.
- Quando eseguo il debug e controllo la gerarchia di controllo, posso vedere che l'etichetta NON è lì.
- Quando cambio l'ID il compilatore genera un errore nel code-behind (che è giusto). Se cambio l'ID lì due ottengo lo stesso comportamento di prima.
- Ho riavviato anche il mio IIS e l'intero pc -> Nessuna modifica.
- Ho aggiunto un attributo
Name
alla definizione linkul -> Nessuna modifica. - Quando provo a utilizzare
FindControl
restituisce NULL. - Il framework di destinazione è .NET 3.5
- Il linkul NON è all'interno di un ripetitore o di altri controlli.
- La rimozione/modifica di web.config non porta nemmeno a una soluzione.
- L'aggiunta di
EnsureChildControls
prima di accedere alinkUl
non modifica nulla. - Anche lo spostamento del codice in Page_PreRender non funziona.
cercherò i vostri suggerimenti non elencati qui e aggiungerli al più presto.
Edit3:
Qui la piena markup:
<%@ 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:
Ok qui alcune informazioni aggiuntive ho scoperto: Quando cambio qualcosa nel codice, come l'aggiunta di pianura testo HTML NON riconosciuto o mostrato nel browser. Quando faccio qualcosa di simile:
Label label1 = new Label();
label1.Text = "hugo lives!";
Controls.Add(label1);
Viene mostrato. Sembra che in Visual Studio tutto vada bene ... Ma "live" sul server il code-behind parla con qualche strano markup diverso ...
Puoi mostrare la definizione generata dal compilatore per linkUl? –
hai il file RTDeluxe.designer.cs? – giammin
@ giammin si, ho modificato la domanda. –