【问题标题】:Calls to successive calls on repeater with XML datasource is not binding new data使用 XML 数据源调用中继器上的连续调用未绑定新数据
【发布时间】:2010-02-22 23:22:47
【问题描述】:

我有以下 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 中,然后由中继器绑定。从文件中获取 XML 数据效果很好,但是当我绑定只能通过 Page_Load 第一次工作的转发器时。此后每次执行此代码时,第一个 XML 文件的相同结果都会显示在转发器中。

我在这里错过了什么。如何在每个页面加载时将 XML 数据绑定到转发器,而不仅仅是第一个?

【问题讨论】:

  • 您说获取 XML 效果很好。这只是第一次吗?或者后续页面加载是否也会获取预期数据?如果您直接浏览页面并提供您自己的查询字符串会发生什么?
  • 嗨,Joel 获取 XML 实际上每次都有效,我已经跟踪以验证这一点,但绑定的 XML 始终来自第一次调用。使用我自己的查询字符串直接浏览页面似乎也不起作用。结果相同。

标签: asp.net xml


【解决方案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();                      
}

【讨论】:

  • 我认为这个想法肯定会奏效。但不是。同样的问题。
  • 在尝试此操作之前,您是否从标记中删除了现有的 XmlDatasource/对它的引用?
  • 是的。如果我没有先删除它们,我实际上会收到错误。
  • 出于好奇,将 source.ID 设置为每个 Page_Load 新生成的值。我怀疑 XmlDataSource 缓存数据的方式有些奇怪。
  • 你的好奇心是正确的!那行得通。非常感谢您的帮助。
【解决方案2】:

我尝试通过遵循您的主要概念的简单实现来复制问题。

后面的代码:

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 文件时,它按预期执行。它既快又脏,但在将它与现有代码进行比较时,它可能会给你一些想法。

【讨论】:

  • 是的,我不确定为什么这种方法对我不起作用。也许是因为我将 xml 数据源的数据设置为字符串值而不是文件? zincorp 的回答对我有用,但我感谢您的反馈。
  • 没错。 DataFile 属性只会映射到物理文件,而 Data 将允许动态 XML
【解决方案3】:

进一步调查发现问题是缓存标志在 XmlDataSource 上设置为默认 true。 SqlDataSource 等其他数据源类型没有启用此标志。

这在下面的文章http://geekswithblogs.net/ranganh/archive/2006/04/28/76638.aspx中有更全面的概述

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多