我是一名新手C#
程序员,试图为RSS/Atom
网站创建一个简单的SharePoint
聚合器网页部分(我不能使用ootb部分,因为我没有企业许可证)。
我有3个按钮:
URI
并尝试构建显示Feed的标签并将其添加到this.Controls;
this.Controls
中删除)ArrayList
URIs
并将其转换为标签(也将其添加到this.Controls
)。清除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
}
}
答案 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>();