UpdatePanel внутри повторителя - PullRequest
2 голосов
/ 28 марта 2011

В моем UserControl я пытаюсь обновить панель обновления, которая находится внутри повторителя, например:

HTML-разметка

<asp:UpdatePanel ID="updDocumentQuickView" runat="server" UpdateMode="Conditional">
  <ContentTemplate>
    <asp:Repeater ID="repFolders" runat="server" OnItemDataBound="repFolders_OnItemDataBound" OnItemCommand="repFolders_OnItemCommand">
        <ItemTemplate>

            <asp:LinkButton ID="lnkFolder" runat="server"></asp:LinkButton>  

            <asp:UpdatePanel ID="updFiles" runat="server" UpdateMode="Conditional">
                <ContentTemplate>
                    <asp:Repeater ID="repFiles" runat="server" OnItemDataBound="repFiles_OnItemDataBound">
                        <ItemTemplate>
                            <%# Container.DataItem %> 
                        </ItemTemplate>                             
                    </asp:Repeater>   
                </ContentTemplate>                
            </asp:UpdatePanel>
        </ItemTemplate>        
    </asp:Repeater>
  </ContentTemplate>
</asp:UpdatePanel>

C # -код

protected void repFolders_OnItemCommand(object sender, CommandEventArgs e)
{  
    int intRow = -1;

    ScriptManager myScriptManager = (ScriptManager)Page.Master.FindControl("myScriptManager");

    Match myMatch = Regex.Match(myScriptManager.AsyncPostBackSourceElementID, "repFolders.ctl([0-9]*).lnkFolder");

    if (myMatch != null)        
        intRow = Convert.ToInt32(myMatch.Groups[1].Value);

    if (intRow > -1)
    {
        RepeaterItem myItem = repFolders.Items[intRow];

        Repeater repFiles = (Repeater)myItem.FindControl("repFiles");
        UpdatePanel updFiles = (UpdatePanel)myItem.FindControl("updFiles");

        string[] arr1 = new string[] { 
                                    "array item 1", 
                                    "array item 2", 
                                    "array item 3", 
                                    "array item 4", 
                                    "array item 5" };

        repFiles.DataSource = arr1;
        repFiles.DataBind();

        updFiles.Update();
    }
}

Конечный результат, который я получаю, заключается в том, что updDocumentQuickView - это UpdatePanel, который обновляется, а не updFiles.Если я оберну UpdatePanel вокруг lnkFolder, то эта UpdatePanel будет обновлена ​​с тем же кодом C #.Я проверил, какие данные отправляются обратно с помощью fiddler, и отправляется неправильная панель обновления.Я получаю правильный RepeaterItem, и оба repFiles и updFiles найдены.Что мне не хватает, чтобы получить нужную UpdatePanel для обновления?

UPDATE

Решение Hawxby решило проблему с обновлением updDocumentQuickView, спасибо за это.Но у меня все еще есть проблемы с updFiles, не отправляющими ничего назад.Некоторое дальнейшее тестирование, с помещением литералов в updFiles и работой, говорит мне, что есть что-то с repFiles, которое не возвращается.У repFiles есть ограниченные данные.

ЗАКЛЮЧИТЕЛЬНОЕ РЕШЕНИЕ

repFiles.Visible были установлены в false в repFolders_OnItemDataBound, неудивительно, что они не отображались.

1 Ответ

2 голосов
/ 28 марта 2011

Скорее всего, вам нужно явно установить асинхронные привязки

<asp:UpdatePanel ID="updDocumentQuickView" ChildrenAsTriggers="false">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="repFolders" EventName="repFolders_OnItemCommand" />
    </Triggers>

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