问题:
我有这样的标记(只有重要的行):
<%@ 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:
好的,我会尽量回答你所有的问题。感谢您的宝贵时间和反馈!
- 我已重新启动 Visual Studio -> 问题仍然存在。
- 我还清理了解决方案并部署了一个新解决方案。 -> 问题仍然存在。
- 当我调试和检查控件层次结构时,我可以看到标签不存在。
- 当我更改 ID 时,编译器会在代码隐藏中抛出错误(这是正确的)。如果我在那里更改 ID,我会得到与以前相同的行为。
- 我还重新启动了我的 IIS 和整个电脑 -> 没有任何变化。
- 我已将
Name
属性添加到 linkul 定义 -> 无更改。 - 当我尝试使用
FindControl
时,它返回 NULL。 - 目标框架是.NET 3.5
- linkul 不在中继器或任何其他控件内。
- 删除/更改 web.config 也不会导致解决方案。
- 在访问
linkUl
之前添加EnsureChildControls
不会改变任何内容。 - 将代码移至 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/