标签已从此处移除。控件不断重现

时间:2011-07-06 15:33:26

标签: c# sharepoint-2010 controls

我是一名新手C#程序员,试图为RSS/Atom网站创建一个简单的SharePoint聚合器网页部分(我不能使用ootb部分,因为我没有企业许可证)。

我有3个按钮:

  1. 新Feed,从用户那里获取URI并尝试构建显示Feed的标签并将其添加到this.Controls;
  2. 清除Feed,清除所有显示的Feed(将其从this.Controls中删除)
  3. 默认Feed,默认ArrayList URIs并将其转换为标签(也将其添加到this.Controls)。
  4. 清除Feed的工作正常,恢复默认值也是如此。但是,在清除所有Feed并尝试添加新Feed后,也会添加默认值(并且一次只能添加一个新Feed,新的Feed会覆盖旧的)。我怀疑这是因为我不完全理解添加/删除控件功能。代码如下:

        ArrayList viewedFeeds = new ArrayList(); 
        ArrayList defaultFeeds = new ArrayList(); //Contains several default feeds, e.g. BBC news (http://feeds.bbci.co.uk/news/rss.xml)
    
        private void newFeed_Click(object sender, EventArgs e)
        {
            renderFeed(userText.Text);
        }
    
        private void clearFeeds_Click(object sender, EventArgs e)
        {
            clearAllFeeds();
        }
    
        private void defaultFeeds_Click(object sender, EventArgs e)
        {
            clearAllFeeds();
            initialiseFeedViewer();
        }
    
        private void clearAllFeeds()
        {
            foreach (Label feed in viewedFeeds)
            {
                this.Controls.Remove(feed);
            }
            viewedFeeds.Clear();
        }
    
        private void initialiseFeedViewer()
        {
            foreach (string uri in defaultFeeds)
                renderFeed(uri);
        }
    
        private void renderFeed(String uri)  
        {
            try  
            {  
                Label feed = new Label();
    
                // Create a Syndicated feed reader, parse the XML and add the relevant text to the label "feed"
                feed.BorderStyle = System.Web.UI.WebControls.BorderStyle.Double;
                viewedFeeds.Add(feed);
                this.Controls.Add(feed);
            }
            catch (Exception ex)
            {   
                //Print an error message (e.g. If the URI does not link to a suitable feed
            }
        }
    

2 个答案:

答案 0 :(得分:1)

事实证明我 多次调用initialiseFeedViewer() - 它在createChildControls()方法中。我假设这只被调用一次,类似于构造函数,但似乎每次加载页面时都会调用它。

这有清除所有变量的烦人副作用,因此我用来跟踪显示的Feed的List<Label>是无用的。

我会尝试将它们存储在Sharepoint列表中来解决这个问题。

答案 1 :(得分:0)

因为您无法一次添加多个控件。在尝试将标签添加到arraylist和用于保存标签控件的“面板”之前,请尝试设置标签的“名称”属性。

private void renderFeed(String uri)  
{
    try  
    {  
        Label feed = new Label();
        feed.Name = uri;
        //Create a Syndicated feed reader, parse the XML and add the relevant text to the label "feed"
        feed.BorderStyle = System.Web.UI.WebControls.BorderStyle.Double;
        viewedFeeds.Add(uri);
        this.Controls.Add(feed);
    }
    catch (Exception ex)
    {   
        //Print an error message (e.g. If the URI does not link to a suitable feed
    }
}

至于在添加新默认值时呈现默认值。我只是确保你没有在事故中调用initialiseFeedViewer()。

正如旁注,arraylist被认为是折旧的。请考虑使用List。

List<string> viewedFeeds = new List<string>();
List<string> defaultFeeds = new List<string>();