后面的ASP / C#代码无法通过标记达到控制

问题:
我有这样的标记(只有重要的行):

 

代码隐藏:

 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似乎是正确的,我的iis的controltemplates文件夹有一个“Kunde”文件夹,里面有相应的ascx文件。

我有其他.ascx文件具有相同的结构 – >他们的工作就像一个魅力。

题:
这种行为的名称空间还有其他原因吗? 你有任何我可以看到的提示吗?

编辑:
RTDeluxe.ascx.designer.cs文件存在,生成的linkUl如下所示:

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

EDIT2:
好的,我会尽力回答你的所有问题。 感谢您的时间和反馈!

  1. 我重新启动了Visual Studio – >问题仍然存在。
  2. 我也清理了解决方案并部署了一个新解决方案。 – >问题仍然存在。
  3. 当我调试并检查控件层次时,我可以看到标签不在那里。
  4. 当我更改ID时,编译器会在代码隐藏中抛出错误(这是正确的)。 如果我更改了ID,我会得到与之前相同的行为。
  5. 我也重新启动了我的IIS和整个电脑 – >没有变化。
  6. 我已经为linkul-definition添加了一个Name属性 – >没有更改。
  7. 当我尝试使用FindControl它返回NULL。
  8. 目标框架是.NET 3.5
  9. linkul不在转发器或任何其他控件内。
  10. 删除/更改web.config也不会导致解决方案。
  11. 在访问linkUl之前添加EnsureChildControls linkUl不会改变任何东西。
  12. 将代码移动到Page_PreRender也不起作用。

我将尝试您未在此处列出的建议,并尽快添加。

EDIT3:
这里是完整的标记:

    

* 编辑4:
好的,我发现了一些额外的信息:当我在标记中更改某些内容时,例如添加普通的html文本,它不会被浏览器识别或显示。 当我做这样的事情:

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

它显示。 在视觉工作室看起来一切都很好……但是在服务器上“活”,代码隐藏会对一些奇怪的不同标记说话……

这可能对你有所帮助:

在类级别的用户控件的代码隐藏文件中,添加以下代码:

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

并删除protected global::System.Web.UI.HtmlControls.HtmlGenericControl linkUl; 来自RTDeluxe.ascx.designer.cs文件

可能是因为它的Object刚刚声明未创建。 希望这可以帮助..

您是否尝试在访问控件或将代码移动到OnPreRender之前调用EnsureChildControls

有时候在这种情况下,可能只是Visual Studio在此文件方面陷入了糟糕的状态。 我发现删除文件并重新创建它们通常可以解决问题。 确保将代码复制到某处,以便将其粘贴回新创建的文件中。

您是否使用visual studio发布function进行部署? 如果是这样,请尝试删除目标服务器上的.ascx文件。 我让visual studio无法识别文件已更改,然后不会复制新文件。

我之前在.aspx文件中遇到了类似的问题。 这是因为我的web.config文件中的optimizeCompilations设置为true。

    

当optimizeCompilations设置为true时,ASP.Net仅在感觉有必要时重建页面。 有时它会变得混乱,并且没有意识到您已经进行了需要进行页面重建的更改,从而导致编译器无法捕获的运行时错误。 有关此设置的详细信息,请参阅此处http://msdn.microsoft.com/en-us/library/ms366723.aspx 。

要解决此问题,我必须暂时将optimizeCompilations设置为false,重建我的网站,回收我的应用程序池,然后再将其重新设置为true。

希望这可以帮助。