我有以下Page_Load函数......
protected void Page_Load(object sender, EventArgs e)
{
XmlDataSource1.Data = GetXmlFromFile(Request.QueryString["file"]);
XmlDataSource1.DataBind();
Repeater1.DataBind();
}
此Page_Load所在的页面由父页面调用。每次调用此Page_Load时,查询字符串中“file”的值都将不同。所以每次我将从不同的文件接收XML内容,这些文件被插入XmlDataSource然后被Repeater绑定。从文件中获取XML数据效果很好但是当我绑定到仅在第一次通过Page_Load工作的转发器时。每次执行此代码后,第一个XML文件的相同结果都会显示在转发器中。
我在这里缺少什么。如何在每个页面加载时将XML数据绑定到转发器而不仅仅是第一个?
答案 0 :(得分:1)
尝试在每次加载时创建一个新的XmlDataSource?
protected void Page_Load(object sender, EventArgs e)
{
XmlDataSource source = new XmlDataSource();
source.ID = "MyDS";
source.Data = GetXmlFromFile(Request.QueryString["file"]);
source.DataBind();
Repeater1.DataSource = source;
Repeater1.DataBind();
}
答案 1 :(得分:1)
我尝试使用遵循主要概念的简单实现来复制问题。
代码背后:
protected void Page_Load(object sender, EventArgs e)
{
if (Request.QueryString["file"] != null)
{
XmlDataSource XmlDataSource1 = new XmlDataSource();
XmlDataSource1.DataFile = "~/App_Data/" + Request.QueryString["file"];
Repeater1.DataSource = XmlDataSource1;
Repeater1.DataBind();
}
}
标记:
<asp:Repeater runat="server" ID="Repeater1" DataSourceID="XmlDataSource1">
<ItemTemplate>
<asp:Label runat="server" ID="lbl" Text='<%# Eval("Name") %>'></asp:Label>
</ItemTemplate>
</asp:Repeater>
当我浏览到“Default.aspx?file = West.xml”时,这是有效的,其中west.xml是我的App_Data文件夹中的xml文件。当我在查询字符串中输入另一个现有的xml文件时,它会按预期执行。它很快就会变脏,但是在将它与现有代码进行比较时,它可能会让你有所了解。
答案 2 :(得分:0)
进一步调查结果证明问题是一个缓存标志,在XmlDataSource上设置为默认值true。其他数据源类型(如SqlDataSource)未启用此标志。
以下文章http://geekswithblogs.net/ranganh/archive/2006/04/28/76638.aspx
对此进行了更全面的介绍禁用缓存功能后,一切都按预期工作。