【问题标题】:Adding an ASP.NET Web User Control to a Control Dynamically将 ASP.NET Web 用户控件动态添加到控件
【发布时间】:2010-05-18 13:39:10
【问题描述】:

我有一个简单的 ASP.NET Web 用户控件。它看起来像这样:

<%@ Control Language="C#" AutoEventWireup="true" 
    CodeBehind="NewsArticle.ascx.cs" 
    Inherits="Website.Controls.NewsArticle" %>

<div>
    <asp:Literal ID="ltlBody" runat="server" />
</div>

我的代码如下:

namespace Website.Controls
{
    public partial class NewsArticle : System.Web.UI.UserControl
    {
        public String bodyText
        {
            //get { return ltlBody.Text; }
            set { ltlBody.Text = value; }
        }
    }
}

在 .aspx 页面上我有 &lt;asp:Panel ID="pNews" runat="server" /&gt;

在我后面的代码中:

foreach (vwNews news in newsQuery)
{
    NewsArticle article = new NewsArticle();
    article.bodyText = news.Body;

    pNews.Controls.Add(article);
}

每次我运行这段代码时,newsQuery 都会正确填充,然后我就到了这条线 aticle.bodyText = news.Body; 然后我收到错误article.bodyText threw an exception of type 'System.NullReferenceException'

我不确定是什么导致了此错误消息或如何修复它。我认为应该没有问题。我尝试为我的 Web 用户控件创建一个构造函数,以便它为我的属性提供默认值,但这不起作用。知道如何进行这项工作吗?好像不应该这样

【问题讨论】:

    标签: c# asp.net-3.5


    【解决方案1】:

    要以编程方式加载控件,您需要使用 Page.LoadControl() 方法。见thisMSDN 文章

    【讨论】:

    • 这只是我清理一些数据以提出问题造成的错误。这并没有导致问题。
    • @RandomBen,以上评论是否与我的帖子有关,或者您是否错误地添加了它。我给你的答案很可能是你的问题的原因。 LoadControl 方法实例化用户控件标记中的控件,如果您在设置属性之前没有使用它,则标记中的文字控件尚未实例化,这将为您提供空引用异常。
    • 这与 Marcus 的帖子有关。我的错,对不起!
    【解决方案2】:

    您编写的代码中有错字。 'aicle' 而不是 'article'。

    【讨论】:

    • 它甚至不能用错字编译:(
    • 这只是我清理一些数据以提出问题造成的错误。这并没有导致问题。
    猜你喜欢
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    相关资源
    最近更新 更多