问题:
我有这样的标记(只有重要的行):
<%@ 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
似乎是正确的,我的iis的controltemplates
文件夹中有一个“Kunde”文件夹,其中包含相应的ascx文件。
我有其他.ascx文件具有相同的结构 - &gt;他们的工作就像一个魅力。
问题:
这种行为的名称空间还有其他原因吗?你有任何我可以看到的提示吗?
修改
RTDeluxe.ascx.designer.cs文件存在,生成的linkUl
如下所示:
protected global::System.Web.UI.HtmlControls.HtmlGenericControl linkUl;
EDIT2:
好的,我会尽力回答你的所有问题。感谢您的时间和反馈!
Name
属性 - &gt;没有变化。FindControl
时,它返回NULL。EnsureChildControls
之前添加linkUl
并不会改变任何内容。我会尝试您未在此处列出的建议,并尽快添加。
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);
显示。在视觉工作室中似乎一切都很好......但是在服务器上“活”,代码隐藏会对一些奇怪的不同标记说话......
答案 0 :(得分: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刚刚声明未创建。 希望这会有所帮助..
答案 1 :(得分:0)
您是否尝试在访问控件或将代码移至EnsureChildControls
之前调用OnPreRender
?
答案 2 :(得分: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。
希望这有帮助。
答案 3 :(得分:0)
有时候在这种情况下,可能只是因为Visual Studio在这个文件方面陷入了糟糕的状态。我发现删除文件并重新创建它们通常可以解决问题。确保将代码复制到某处,以便将其粘贴回新创建的文件中。
答案 4 :(得分:0)
您使用visual studio发布功能进行部署吗? 如果是这样,请尝试删除目标服务器上的.ascx文件。我让visual studio无法识别文件已更改,然后不会复制新文件。