asp.net 使用XML数据源对中继器上的连续调用的调用未绑定新数据

sg2wtvxw  于 2023-04-08  发布在  .NET
关注(0)|答案(3)|浏览(115)

我有以下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数据非常有效,但是当我绑定repeater时,它只在第一次通过Page_Load时有效。此后每次执行此代码时,中继器中都会显示来自第一个XML文件的相同结果。
我在这里遗漏了什么呢?我怎样才能在每次页面加载时将XML数据绑定到中继器,而不仅仅是第一个页面?

zvms9eto

zvms9eto1#

是否尝试在每次加载时创建新的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();                      
}
wwwo4jvm

wwwo4jvm2#

我试图用一个简单的实现来复制这个问题,这个实现遵循了你的主要概念。
代码隐藏:

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文件时,它会按预期执行。这是快速而肮脏的,但当与现有代码进行比较时,它可能会给予你一些想法。

qqrboqgw

qqrboqgw3#

进一步调查发现,问题出在XmlDataSource的缓存标志被设置为default true。其他数据源类型(如SqlDataSource)没有启用此标志。
这在下面的文章Link中有更全面的介绍
禁用缓存功能后,一切都按预期工作。

相关问题