问题:
我有这样的标记(只有重要的行):
<%@ 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
是 NULL。
首先,我认为命名空间是原因。但是,经过几次尝试,我确信它们是正确的。这FileLocation
似乎是正确的controltemplates
,我的 iis 文件夹中有一个“Kunde”文件夹,其中包含相应的 ascx 文件。
我还有其他具有相同结构的 .ascx 文件->它们的工作就像一个魅力。
问题:
这种行为除了命名空间之外还有其他原因吗?你有什么提示我可以看看吗?
编辑:
RTDeluxe.ascx.designer.cs 文件存在,生成linkUl
如下:
protected global::System.Web.UI.HtmlControls.HtmlGenericControl linkUl;
Edit2:
好的,我会尽力回答你所有的问题。感谢您的时间和反馈!
- 我已重新启动 Visual Studio -> 问题仍然存在。
- 我还清理了解决方案并部署了一个新解决方案。-> 问题仍然存在。
- 当我调试并检查控件层次结构时,我可以看到标签不存在。
- 当我更改 ID 时,编译器会在代码隐藏中引发错误(这是正确的)。如果我在那里更改两个 ID,我会得到与以前相同的行为。
- 我还重新启动了我的 IIS 和整个 pc -> 没有更改。
- 我
Name
在linkul-definition 中添加了一个属性-> 没有更改。 - 当我尝试使用它时,
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);
它显示出来。似乎在视觉工作室中一切都很好......但是在服务器上“直播”代码隐藏在一些奇怪的不同标记上......