6

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

<%@ 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:
好的,我会尽力回答你所有的问题。感谢您的时间和反馈!

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

它显示出来。似乎在视觉工作室中一切都很好......但是在服务器上“直播”代码隐藏在一些奇怪的不同标记上......

4

5 回答 5

1

这可能会对您有所帮助:

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

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 刚刚被声明为未创建。希望这可以帮助..

于 2012-01-31T13:22:41.893 回答
0

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

于 2012-01-11T16:42:35.210 回答
0

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

于 2012-01-09T16:18:19.207 回答
0

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

于 2012-01-11T00:45:58.190 回答
0

我之前在 .aspx 文件中遇到过类似的问题。这是由于在我的 web.config 文件中将 optimizeCompilations 设置为 true 造成的。

<system.web>
    <compilation optimizeCompilations="true" />
</system.web>

当 optimizeCompilations 设置为 true 时,ASP.Net 仅在认为有必要时重建页面。有时它会感到困惑并且没有意识到您所做的更改需要重新构建页面,从而导致编译器无法捕获的运行时错误。有关此设置的更多信息,请参见此处http://msdn.microsoft.com/en-us/library/ms366723.aspx

为了解决这个问题,我不得不暂时将 optimizeCompilations 设置为 false,重建我的网站,回收我的应用程序池,然后再次将其设置回 true。

希望这可以帮助。

于 2012-01-09T20:52:11.617 回答