Asp.net ASPNET WebForms服务器控件在页面加载中为空

Asp.net ASPNET WebForms服务器控件在页面加载中为空,asp.net,webforms,nullreferenceexception,Asp.net,Webforms,Nullreferenceexception,我有一个非常奇怪的情况,我的标签控件在页面加载中为空。甚至可能吗 我有一个网络表单: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="MyNamespace.Templates.Pages.WebForm1" %> <%@ Register TagPrefix="cw" Namespace="MyNamespace.Templates.Units" Ass

我有一个非常奇怪的情况,我的标签控件在页面加载中为空。甚至可能吗

我有一个网络表单:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="MyNamespace.Templates.Pages.WebForm1" %>
<%@ Register TagPrefix="cw" Namespace="MyNamespace.Templates.Units" Assembly="MyNamespace" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div style="background-color:yellowgreen;">
        FIRST
    </div>
    <div style="background-color: wheat;">
        SECOND
        <cw:ArticleColumn runat="server" ID="ac" ArticleID="1899"/>
    </div>
    </form>
</body>
</html>
“用户控件”列如下所示:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ArticleColumn.ascx.cs"  Inherits="MyNamespace.Templates.Units.ArticleColumn" %>
<h2><asp:Label runat="server" ID="myArticleHeading" Text="TOM" /></h2>
<p><asp:Label runat="server" ID="myArticleIntro" Text="TOM" /></p>
<asp:Label runat="server" ID="myArticleBody" Text="TOM" />
public partial class ArticleColumn : UserControlBase<PageTypes.ArticleBase>
{
    public int ArticleID { get; set; }

    protected void Page_Load(object sender, EventArgs e)
    {
        var page = DataFactory.Instance.GetPage(new PageReference(ArticleID));

        myArticleHeading.Text = page.PageName;
        myArticleIntro.Text = page.Property["IntroText"] != null
                            ? page.Property["IntroText"].ToWebString()
                            : string.Empty;
        myArticleBody.Text = page.Property["MainBody"] != null
                            ? page.Property["MainBody"].ToWebString()
                            : string.Empty;

        DataBind();
    }
}
解决方案: 我自己刚找到答案。将此声明用于页面上的usercontrol修复了以下问题:

<%@ Register TagPrefix="cw" TagName="ArticleColumn" Src="~/Templates/Units/ArticleColumn.ascx" %>
<%@ Register TagPrefix="cw" TagName="ArticleColumn" Src="~/Templates/Units/ArticleColumn.ascx" %>

此错误声明是使用html视图中的ReSharper右键单击菜单添加的:

<%@ Register TagPrefix="cw" Namespace="MyNamespace.Templates.Units" Assembly="MyNamespace" %>
<%@ Register TagPrefix="cw" Namespace="MyNamespace.Templates.Units" Assembly="MyNamespace" %>


谢谢你的帮助!:)

从页面更新用户控件的内容


在用户控件中声明属性以更新标签内容,并使用用户控件实例页面中的这些属性。

数据绑定用于将在aspx部件中编写的控件与服务器端脚本ie绑定

但是您的场景不需要调用databind()。只需将值分配给控件就可以了


尝试从代码中删除数据绑定。

我回答了上面我自己的问题

解决方案:我自己刚刚找到了答案。将此声明用于页面上的usercontrol修复了以下问题:

<%@ Register TagPrefix="cw" TagName="ArticleColumn" Src="~/Templates/Units/ArticleColumn.ascx" %>
<%@ Register TagPrefix="cw" TagName="ArticleColumn" Src="~/Templates/Units/ArticleColumn.ascx" %>

此错误声明是使用html视图中的ReSharper右键单击菜单添加的:

<%@ Register TagPrefix="cw" Namespace="MyNamespace.Templates.Units" Assembly="MyNamespace" %>
<%@ Register TagPrefix="cw" Namespace="MyNamespace.Templates.Units" Assembly="MyNamespace" %>


谢谢你的帮助!:)

为什么要在web窗体的页面加载和用户控件的页面加载上对DataBind进行常规调用?事实上,你为什么打电话给数据绑定?另外,你能包括异常/堆栈跟踪吗?数据绑定是我修复这个问题的不顾一切的尝试:S将添加堆栈跟踪.K。摆脱那些DataBind()调用。他们什么也没做。第二,在myArticleHeading.Text=page.PageName之前;第行,添加以下内容:字符串sTest=page.PageName;目标是确认它不是空的“page”变量。解决方案是声明控件而不是声明名称空间(请参见问题)。ReSharper在添加引用时做得不好。如果您的问题已解决,请将此问题设置为“已回答”并进行解释:您应该按路径加载conrol,而不是按程序集和命名空间加载。小心点。我发现我必须在
web.config
文件中注册控件,它才能工作谢谢!我花了一个小时试图找出问题的原因,如果不是这个答案,我会花更多的时间:)我未来的自我注意:检查Visual Studio代码是否在文件顶部格式化声明。我花了整整一个上午试图了解发生了什么。也是ReSharper将引用作为名称空间导入到ascx中。非常感谢。