Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP/C#代码隐藏无法从标记访问控件_C#_Asp.net_Sharepoint 2010_Controltemplates - Fatal编程技术网

ASP/C#代码隐藏无法从标记访问控件

ASP/C#代码隐藏无法从标记访问控件,c#,asp.net,sharepoint-2010,controltemplates,C#,Asp.net,Sharepoint 2010,Controltemplates,问题: 我有这样的标记(只有重要的行): 我可以访问代码背后的ul,并且没有编译错误。但是,当我调试代码时,我会得到一个NullReferenceException,因为linkUl为NULL 首先,我认为名称空间是原因。但是,经过几次尝试,我确信他们是正确的。FileLocation似乎是正确的,my iis的controltemplates文件夹中有一个“Kunde”文件夹,其中包含相应的ascx文件 我还有其他的.ascx文件,它们的结构相同->它们工作得很好 问题: 除了名称空间之外,还

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

我可以访问代码背后的
ul
,并且没有编译错误。但是,当我调试代码时,我会得到一个
NullReferenceException
,因为
linkUl
为NULL

首先,我认为名称空间是原因。但是,经过几次尝试,我确信他们是正确的。
FileLocation
似乎是正确的,my iis的
controltemplates
文件夹中有一个“Kunde”文件夹,其中包含相应的ascx文件

我还有其他的.ascx文件,它们的结构相同->它们工作得很好

问题:
除了名称空间之外,还有其他原因导致这种行为吗?你有什么提示可以让我看看吗

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

protected global::System.Web.UI.HtmlControls.HtmlGenericControl linkUl;
   Label label1 = new Label();
   label1.Text = "hugo lives!";
   Controls.Add(label1);
Edit2:
好的,我会尽力回答你所有的问题。感谢您的时间和反馈

  • 我已重新启动Visual Studio->问题仍然存在
  • 我还清理了解决方案并部署了一个新的解决方案。->问题依然存在
  • 当我调试并检查控件层次结构时,我可以看到标签不在那里
  • 当我更改ID时,编译器会在代码中抛出一个错误(这是正确的)。如果我在这两个地方更改ID,我会得到与以前相同的行为
  • 我还重新启动了我的IIS和整个电脑->无更改
  • 我在linkul定义中添加了一个
    Name
    属性->没有更改
  • 当我尝试使用
    FindControl
    时,它返回NULL
  • 目标框架是.NET3.5
  • linkul不在中继器或任何其他控件内
  • 删除/更改web.config也不会产生解决方案
  • 在访问
    linkUl
    之前添加
    ensureChildControl
    不会改变任何内容
  • 将代码移动到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"/>
    

    如图所示。似乎在visual studio中一切都很好。。。但是,在服务器上“实时”隐藏的代码与一些奇怪的不同标记通信…

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

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

    <system.web>
        <compilation optimizeCompilations="true" />
    </system.web>
    
    
    
    当Optimizations设置为true时,ASP.Net仅在认为有必要时重建页面。有时它会感到困惑,没有意识到您所做的更改需要重新生成页面,从而导致编译器无法捕获的运行时错误。有关此设置的更多信息,请参见此处

    为了解决这个问题,我必须临时将OptimizeCompiles设置为false,重建我的网站,回收我的应用程序池,然后再次将其设置为true


    希望这能有所帮助。

    有时在这种情况下,可能只是Visual Studio对此文件的状态不好。我发现删除文件并重新创建它们通常可以解决问题。请确保将代码复制到某个位置,以便将其粘贴回新创建的文件。

    是否使用visual studio发布功能进行部署?
    如果是,请尝试删除目标服务器上的.ascx文件。我让visual studio无法识别文件已更改,因此无法复制新文件。

    这可能会对您有所帮助:

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

    protected global::System.Web.UI.HtmlControls.HtmlGenericControl linkUl = new System.Web.UI.HtmlControls.HtmlGenericControl();
    
    并删除受保护的全局::System.Web.UI.HtmlControls.HtmlGenericControl链接来自
    RTDeluxe.ascx.designer.cs
    文件

    这可能是因为它的对象刚刚声明为未创建。
    希望这有帮助。

    您能显示编译器生成的linkUl定义吗?您有RTDeluxe.designer.cs文件吗?@giammin是的,我已经编辑了这个问题。@lmw该控件是在中继器中还是类似的数据绑定控件中?是的,好的。ASCX是一个服务器控件-它需要在页面(ASPX)中定义。你是怎么做到的?通常你会对这些建议表示感谢:)我尝试了这两种方法,但不幸的是这并没有改变行为:(非常确定所有EnsureChildControls所做的就是确保CreateChildControls方法只被调用一次。默认情况下,Page不会覆盖该方法,并且控件有一个空的抽象方法。
    <system.web>
        <compilation optimizeCompilations="true" />
    </system.web>
    
    protected global::System.Web.UI.HtmlControls.HtmlGenericControl linkUl = new System.Web.UI.HtmlControls.HtmlGenericControl();