使用XML数据源调用对转发器的连续调用不会绑定新数据

时间:2010-02-17 20:14:34

标签: asp.net xml

我有以下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数据绑定到转发器而不仅仅是第一个?

3 个答案:

答案 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

对此进行了更全面的介绍

禁用缓存功能后,一切都按预期工作。