В моем 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, а не UpdFiles, а UpdatePanel. Если я оборачиваю UpdatePanel вокруг lnkFolder, тогда эта UpdatePanel обновляется с тем же кодом C #. Я проверил, какие данные отправляются обратно с помощью fiddler, и отправил неправильный UpdatePanel. Я получаю правильный RepeaterItem, и обнаруживаются и repFiles, и updFiles. Что мне не хватает, чтобы получить нужную UpdatePanel для обновления?
ОБНОВИТЬ
Решение Hawxby решило проблему с обновлением updDocumentQuickView, спасибо за это. Но у меня все еще есть проблемы с updFiles, которые ничего не отправляют обратно. Некоторое дальнейшее тестирование, с помещением литералов в updFiles и работой, говорит мне, что есть что-то с repFiles, которое не возвращается. В repFiles есть ограниченные данные.
ОКОНЧАТЕЛЬНОЕ РЕШЕНИЕ
repFiles.Visible были установлены в значение false в repFolders_OnItemDataBound, неудивительно, что это не отображалось.