请教关于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事件中进行的动态加载却没有问题,请教这是什么原因?
...全文
203 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
adow 2006-09-18
  • 打赏
  • 举报
回复
是不是需要在添加完了后自己调用存储persionlize啊。
或者不应该在page-load中,要在别的事件中添加。
nimeide1234567890 2006-09-18
  • 打赏
  • 举报
回复
ding
adow 2006-09-18
  • 打赏
  • 举报
回复
有没有人知道啊?
自己来顶一下
adow 2006-09-18
  • 打赏
  • 举报
回复
每次都重新加载虽然可以,但这并不是我所希望的效果。
我无法理解的是,我通过button事件创建的内容区域是会被保存在personlize数据库中的,当我重新登陆后,这样的内容是会被自动加载的啊。
而如果我是在page-load中创建的内容,我看到他的数据也被保存到了aspnet_PersonalizationPerUser表中(因为我看到他建了一条记录),而我再次登陆后,他却好象没有从aspnet_PersonalizationPerUser中得到数据似的,没有自己加载数据。

我本来的想法是第一次在page_load中创建内容后,定制的数据会被保存到数据库中,第二次进去时就是可以通过aspnet_PersonalizationPerUser保存的个人数据进行加载了。
myminimouse 2006-09-18
  • 打赏
  • 举报
回复
帮顶
erwanfan 2006-09-18
  • 打赏
  • 举报
回复
这个就是web响应的原理,web是无状态的。
每一次访问,都相当于执行了一次新的web的加载过程,并根据页面post过来的状态,加载服务器端已经声明的控件,虽然第二次响应时post过来的有你控件的信息和状态,但是后台重新加载的时候,并没有相对应的服务器端控件(你的控件是点button动态加载的),所以响应的时候,这一次交互就并没有在响应中包含该控件对于的html代码信息。

动态控件 如果要保持状态,应该每次都重新加载
adow 2006-09-18
  • 打赏
  • 举报
回复
为什么没人回答啊,是这个问题太难还是分太少,100分还闲少的话我就再开一个帖子。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧