Я запускаю событие из элемента управления ascx, чтобы обновить некоторые элементы управления в контейнере, к которому принадлежит элемент управления ascx.
Элемент управления ascx отображается через модальный всплывающий расширитель. Когда я нажимаю кнопку внутри ascx, я запускаю событие, на которое подписывается контейнер, содержащий элемент управления ascx.
Делегат события срабатывает, и ожидаемая логика выполняется в коде контейнера, проблема в том, что любые изменения, внесенные в элементы управления внутри контейнера, не обновляются, несмотря на то, что логика события была обработана. Ожидаемые изменения не отражаются на странице при отображении результатов обратной передачи.
Есть ли какие-нибудь подводные камни, о которых я должен знать?
Разметка для контейнера
<asp:Panel ID="panelTreeViewAttributesTitle" runat="server">
<asp:Label ID="someLabel" runat="server" Text="Hello Governor" />
<asp:LinkButton ID="LinkButtonEdit" runat="server" Text="(Edit)" />
<ajax:ModalPopupExtender BackgroundCssClass="modalBackground" Enabled="True"
ID="btnEdit_ModalPopupExtender" PopupControlID="modalPanel" runat="server"
TargetControlID="LinkButtonEdit" />
</asp:Panel>
<asp:Panel ID="modalPanel" runat="server" CssClass="modalPopUp" Style="display: none">
<xxx:customControl runat="server" ID="myCustomControl" />
</asp:Panel>
Код для контейнера
protected void Page_Load(object sender, EventArgs e)
{
myCustomControl.Updated += eventCaptured;
if (IsPostBack) return;
...
}
void eventCaptured(object sender, EventArgs e)
{
someLabel.Text = "Goodbye Governor";
}
Пользовательский элемент управления
<script type="text/javascript">
function Update() {
var ajaxManager = $find("<%= RadAjaxManager.GetCurrent(Page).ClientID %>");
if (ajaxManager != null)
ajaxManager.ajaxRequest("");
}
</script>
<asp:Panel ID="panelEditPanel" runat="server">
<asp:Label ID="lblCMA" runat="server" Text="Call me Arnooold." />
</asp:Panel>
<asp:Button ID="btnUpdate" runat="server" Text="Update" OnClientClick="Update()" />
<asp:Button ID="btnCancel" runat="server" Text="Cancel" />
Код пользовательского элемента управления, стоящий за
public event EventHandler Updated;
protected void AjaxManager_AjaxRequest(object sender, AjaxRequestEventArgs e)
{
//Some DB backend logic
UpdateFinished();
}
private void UpdateFinished()
{
if (Updated == null) return;
Updated(this, null);
}