Запуск события из элемента управления ascx для обновления некоторых элементов управления в контейнере

Я запускаю событие из элемента управления 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);
}

person Matt    schedule 06.10.2010    source источник
comment
Вы говорите asp.net-ajax в тегах, но пространство имен кажется Rad Controls. Что он?   -  person Hogan    schedule 06.10.2010
comment
И то, и другое - я работаю над решением некоторых из них, это может быть частью проблемы.   -  person Matt    schedule 06.10.2010


Ответы (1)


Возможно, нажатие кнопки вызывает частичную обратную публикацию, а не обычную, полностраничную обратную публикацию. В этом случае весь жизненный цикл будет выполняться на стороне сервера (включая ваш обработчик событий), но только часть HTML будет обновлена ​​на стороне клиента, когда ответ вернется в браузер. someLabel может находиться за пределами региона, который обновляется на стороне клиента.

person William Gross    schedule 10.10.2010