请教关于webpart的问题
adow 2006-09-18 09:32:52 我在尝试用webpart做一个类似live.com那样的rss阅读器,我现在在动态添加webpart的时候遇到了一个问题。
我通过继承Webpart实现一个显示rss内容的类,然后在页面中动态添加到webpartzone中。
public class RssWp:WebPart
{
private string _rssurl = "http://q.thmz.com/rss/axd.xml";
private int _total = 5;
public Rss rss;
[WebBrowsable]
[Personalizable]
public string rssurl
{
get
{
return this._rssurl;
}
set
{
this._rssurl = value;
}
}
[Personalizable]
[WebBrowsable]
public int total
{
get
{
return this._total;
}
set
{
this._total = value;
}
}
protected override void RenderContents(HtmlTextWriter writer)
{
//Rss rss = null;
rss = RssProc.ReadRss(this.rssurl, this.total);
if (rss == null)
return;
string html = "";
foreach (RssItem ri in rss.items)
{
html += "<li><a href='" + ri.link + "' target='_blank'>" + ri.title + "</li>";
}
writer.Write(html);
base.RenderContents(writer);
}
public RssWp()
{
}
public RssWp(string in_rssurl, int in_total)
{
this.rssurl = in_rssurl;
this.total = in_total;
rss = RssProc.ReadRss(this.rssurl, this.total);
if (rss != null)
{
this.Title = rss.title;
this.TitleUrl = rss.link;
}
}
}
以上是一个用于显示rss新闻列表的类。
在页面default.aspx中,有名为wpz_left的webpartzone,我先在页面中放了一个button来动态添加一个rss的订阅信息:
void lb_new_Click(object sender, EventArgs e)
{
RssWp wp = new RssWp("http://adow.blog.thmz.com/user1/9/rss2.xml",
10);
this.wpm.AddWebPart(wp, this.wpz_left, 0);
}
这样的确可以实现我所希望的效果,这个添加的内容也被存储到aspnet_PersonalizationPerUser中,在我重新登陆后,之前被创建的内容也正确显示了。
下面,我想要在用户进入页面的时候自己创建一些内容(因为我想可能有些公告之类的内容需要被自动创建),因此,我是将自动创建的内容写在数据库中,在page_load中,读取后创建一个内容,然后在把数据库中的数据删除(防止下次又被创建)。我是这样做的:
private void AddRsscontent()
{
IList newslist = RssNews.RssNewslist(this.User.Identity.Name, 0);
if (newslist != null)
{
foreach (CRssNews onenews in newslist)
{
RssWp wp = new RssWp(onenews.rssurl, onenews.total);
if (wp.rss != null)
{
this.wpm.AddWebPart(wp, this.wpz_left, 0);
}
bool isok = RssNews.DeleteRssNews(onenews);
}
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
this.AddRsscontent();////这里创建自动加载的内容
}
this.wpm.DisplayMode = WebPartManager.DesignDisplayMode;
}
而问题就在这里,当我第一次进来后,他根据数据库中的内容创建了,而且,可以看到aspnet_PersonalizationPerUser中也被写入了数据,而第二次进去却看不到第一次自动创建的内容了,但是第一次的数据应该是被持久化了吧,为什么我第二次没看到。
也就是说,我在page-load中动态加载的webpart没有被持久化到aspnet_PersonalizationPerUser中(也许是进去了,但是我再次访问时没有根据aspnet_PersonalizationPerUser的数据加载应该有的内容),而我通过button事件中进行的动态加载却没有问题,请教这是什么原因?