Изменение содержимого UpdatePanel на MasterPage со страницы содержимого не работает - PullRequest
2 голосов
/ 03 марта 2020

Хорошо, поэтому я столкнулся с любопытной проблемой, которую я смог сузить до следующего кода. Я создал новый проект веб-форм и добавил некоторые элементы управления в панели обновления:

Default.aspx

<asp:UpdatePanel runat="server" ID="udpDefault">
    <ContentTemplate>
        <asp:LinkButton runat="server" ID="lbPost" Text="Click for error" OnClick="lbPost_Click"></asp:LinkButton>
    </ContentTemplate>
</asp:UpdatePanel>

<asp:UpdateProgress runat="server" AssociatedUpdatePanelID="udpDefault">
    <ProgressTemplate>
        Updating...
    </ProgressTemplate>
</asp:UpdateProgress>

Default.aspx.cs

protected void Page_Load(object sender, EventArgs e)
{
      if(IsPostBack)
      {
          (Master as SiteMaster).ShowInfoMessage("Test info message");
      }
}

protected void lbPost_Click(object sender, EventArgs e) { }

Site.Master

 <asp:UpdatePanel runat="server" ID="pSubHeaderInfoAsync" Visible="false">
            <ContentTemplate>
                <asp:Label runat="server" ID="lInfoMessageAsync"></asp:Label>
            </ContentTemplate>
 </asp:UpdatePanel>

Site.Master.cs

 protected void Page_Load(object sender, EventArgs e) { }

 public void ShowInfoMessage(string info)
 {
      pSubHeaderInfoAsync.Visible = true; //this causes the problem
      lInfoMessageAsync.Text = info;
 }

Теперь ожидается поведение будет следующим: пользователь нажимает кнопку LinkButton на странице содержимого, и на главной странице отображается панель с информационным сообщением. Но это не так. «Updating ...» из UpdateProgress никогда не исчезает, и в консоли браузера вы можете увидеть общую ошибку c AJAX:

TypeError: Sys.WebForms.Res не определено.

Проблема, кажется, в закомментированной строке, которая устанавливает видимость UpdatePanel. Если я изменяю код и удаляю Visible = "false" из представления, а также удаляю строку, упомянутую ранее, это работает.

Перемещение этого логика c на страницу содержимого также заставляет его работать (включая изменение видимости UpdatePanel).

Еще одно наблюдение: если я установил видимость UpdatePanel в значение "true" "в конструкторе это также работает (потому что код не изменяет значение видимости, потому что это уже верно).

Любые объяснения этого поведения приветствуются:)

...