Проблема:
У меня есть разметка, как это (только важные строки):
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="RTDeluxe.ascx.cs"
Inherits="MainSolution.CONTROLTEMPLATES.Kunde.RTDeluxe" %>
<ul id="linkUl" class="teaserLinksUL" runat="server"/>
Кодовый код:
namespace MainSolution.CONTROLTEMPLATES.Kunde
public partial class RTDeluxe : UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
linkUl.InnerHtml = string.Empty;
}
}
Я могу получить доступ к ul
внутри кода и не получить ошибку компиляции. Но когда я отлаживаю код, я получаю NullReferenceException
, потому что linkUl
НЕДЕЙСТВИТЕЛЕН.
Сначала я подумал, что пространства имен являются причиной. Но после нескольких попыток я уверен, что они правы. FileLocation
кажется правильным, и в папке controltemplates
моего iis есть папка "Kunde" с соответствующими файлами ascx.
У меня есть другие файлы .ascx с такой же структурой -> они работают как шарм.
Вопрос:
Есть ли другие причины, кроме пространства имен для такого поведения? У вас есть какие-нибудь подсказки, где я могу посмотреть?
Edit:
Файл RTDeluxe.ascx.designer.cs существует, сгенерированный linkUl
выглядит так:
protected global::System.Web.UI.HtmlControls.HtmlGenericControl linkUl;
Edit2:
Хорошо, я постараюсь ответить на все ваши вопросы. Спасибо за ваше время и обратную связь!
- Я перезапустил Visual Studio -> Проблема не устранена.
- Я также очистил решение и развернул новое. -> Проблема сохраняется.
- Когда я отлаживаю и проверяю иерархию управления, я вижу, что там нет метки.
- Когда я меняю идентификатор, компилятор выдает ошибку в коде (что верно). Если я поменяю ID, то получу то же поведение, что и раньше.
- Я также перезапустил свой IIS и весь компьютер -> Без изменений.
- Я добавил атрибут
Name
в определение linkul -> Без изменений.
- Когда я пытаюсь использовать
FindControl
, возвращается NULL.
- Целевой платформой является .NET 3.5
- Linkul НЕ находится внутри ретранслятора или каких-либо других элементов управления.
- Удаление / изменение файла web.config также не приводит к решению.
- Добавление
EnsureChildControls
перед доступом к linkUl
ничего не меняет.
- Перемещение кода в Page_PreRender также не работает.
Я опробую ваши предложения, не перечисленные здесь, и скоро добавлю их.
Edit3:
Вот полная разметка:
<%@ 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:
Хорошо, вот некоторая дополнительная информация, которую я узнал:
Когда я что-то изменяю в разметке, например, добавляю простой текст HTML, он НЕ распознается и не отображается в браузере. Когда я делаю что-то вроде этого:
Label label1 = new Label();
label1.Text = "hugo lives!";
Controls.Add(label1);
Показано. Кажется, что в Visual Studio все хорошо ... Но "живой" на сервере код позади говорит с какой-то странной разметкой ...