Issue:
我有这样的标记(只有重要的行):
<%@ 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 时,编译器会在代码隐藏中引发错误(这是正确的)。如果我更改两个 ID,我会得到与以前相同的行为。
- 我还重新启动了 IIS 和整个电脑 -> 没有任何变化。
- 我添加了一个
Name
linkul-definition 的属性 -> 没有更改。
- 当我尝试使用时
FindControl
它返回 NULL。
- 目标框架是.NET 3.5
- linkul 不在中继器或任何其他控件内。
- 删除/更改 web.config 也不会产生解决方案。
- Adding
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);
如图所示。看起来在视觉工作室中一切都很好......但是在服务器上“实时”,代码隐藏涉及一些奇怪的不同标记......