Призывы к последовательным вызовам повторителя с источником данных XML не связывают новые данные - PullRequest
2 голосов
/ 17 февраля 2010

У меня есть следующая функция 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 для привязки к повторителю при каждой загрузке страницы, а не только по первой?

Ответы [ 3 ]

1 голос
/ 18 февраля 2010

Я попытался продублировать проблему с помощью простой реализации, которая соответствует вашей основной концепции.

Код:

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();
    }
}

Markup:

<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 - это XML-файл в моей папке App_Data. Когда я вписываю другой существующий XML-файл в строку запроса, он работает как ожидалось. Это быстро и грязно, но, возможно, это даст вам некоторое представление о сравнении его с существующим кодом.

1 голос
/ 17 февраля 2010

Пробовал создавать новый 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();                      
}
0 голосов
/ 22 февраля 2010

При дальнейшем исследовании выясняется, что проблема заключается в кеширующем флаге, который по умолчанию имеет значение true в XmlDataSource. Другие типы источников данных, такие как SqlDataSource, не включают этот флаг.

Это более подробно описано в следующей статье http://geekswithblogs.net/ranganh/archive/2006/04/28/76638.aspx

После отключения функции кэширования все работает как положено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...