动态地向控件中添加一个 ASP.NET Web 用户控件

3

我有一个简单的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页面上,我有一个标签。
在代码后台,我有:
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用户控件的构造函数,以便它可以为我的属性提供默认值,但没有起作用。你有任何想法如何使它工作吗?这似乎不应该是那样。
2个回答

4

要通过编程方式加载控件,您需要使用Page.LoadControl()方法。请参阅此MSDN文章


那只是我清理一些数据来制作问题时导致的错误。那不是引起问题的原因。 - Ben Hoffman
@RandomBen,上面的评论是和我的帖子有关还是你不小心加的?我给你的答案很可能是你问题的原因。LoadControl方法实例化了用户控件标记中的控件,如果在设置属性之前你没有使用它,标记中的文字控件尚未被实例化,这会导致空引用异常。 - Ben Robinson
这与Marcus的帖子有关。我的错误,抱歉! - Ben Hoffman

-2

你写的代码中有一个错别字。应该是'article'而不是'aticle'。


连编译都过不了,因为有错别字 :( - Julius A
那只是我清理一些数据以提出问题时造成的错误。那并没有引起这个问题。 - Ben Hoffman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接