Хорошо, поэтому я столкнулся с любопытной проблемой, которую я смог сузить до следующего кода. Я создал новый проект веб-форм и добавил некоторые элементы управления в панели обновления:
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" "в конструкторе это также работает (потому что код не изменяет значение видимости, потому что это уже верно).
Любые объяснения этого поведения приветствуются:)