c# - 隐藏的 ASP/C# 代码无法从标记获得控制

标签 c# asp.net sharepoint-2010 controltemplates

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

<%@ 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 文件 -> 它们工作起来非常棒。

问题:
这种行为除了 namespace 之外还有其他原因吗?你有什么我可以看的提示吗?

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

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

编辑2:
好的,我会尽量回答你所有的问题。感谢您的宝贵时间和反馈!

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

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

编辑3:
这里是完整的标记:

<%@ 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"/>

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

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

显示出来了。在 visual studio 中似乎一切都很好......但是在服务器上“实时”运行代码隐藏说明了一些奇怪的不同标记......

最佳答案

这可能会对您有所帮助:

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

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

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

可能是因为它的 Object 只是声明没有创建。 希望这有帮助..

关于c# - 隐藏的 ASP/C# 代码无法从标记获得控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8789441/

相关文章:

c# - C#代码同一行上的ASPX网站错误

c# - 使用 json.net c# 反序列化 json

c# - bool 值有什么区别? MyProperty 和 bool ?MyProperty

sql - '/'应用程序中的服务器错误。 ')'附近的语法不正确

asp.net - 自动 IIS6 403.4 重定向到 SSL 不工作

sharepoint - SharePoint Online 2010 功能区中的自定义链接/按钮

C# - 如果在默认情况下获取开关值

c# - 如何编译运行单个class文件的cs文件?

sharepoint - 在具有多个 WFE 的服务器场环境中部署计时器作业的最佳实践

jquery - SharePoint 搜索和搜索范围框相互堆叠