2015-04-27 2 views
0

Я пишу какую-либо панель сообщений в качестве пользовательского элемента управления. Код выглядит следующим образом (укороченный для ясности)Данные, не привязанные к ListView при обратной передаче

protected void Page_PreRender(object sender, EventArgs e) 
{ 
    BindMessages(MessageType.Error, ErrListView); 
} 

private void BindMessages(MessageType type, ListView target) 
{ 
    List<string> messages = Session.PopMessages(type); 
    target.DataSource = messages; 
    target.DataBind(); 
} 

ASCX:

<asp:ListView runat="server" ID="ErrListView"> 
    <ItemTemplate><li><%# Container.DataItem %></li></ItemTemplate> 
</asp:ListView> 

код запускается на выполнение по каждому запросу (начальная страница загрузки и обратной передачи), как и должно быть, и сообщения приходят из SessionState правильно. Однако, если запрос является обратной передачей, сообщения фактически не обновляются (как будто DataBind() не произойдет).

Кто-нибудь понял, что происходит?

+1

У меня не было бы привязки данных в prerender - слишком поздно в жизненном цикле страницы для некоторых вещей для работы (возможно, вы будете бороться с изменениями после обратной передачи). –

+0

hm, тогда мне нужно другое решение, как получить мои данные клиенту ... потому что очевидно, что сообщения генерируются событиями, поэтому PreRender - это единственное место, где это возможно. – FrankyBoy

+0

@FrankyBoy, который должен работать все же. Вы пытались отладить, чтобы убедиться, что 'Session.PopMessages (type)' возвращает то, что вы ожидаете во время обратной передачи? – Andrei

ответ

0

Причина, по которой я потерпел неудачу, заключалась в том, что мой контент не содержал UpdatePanel. Изменение моего ascx-файла для включения указанного элемента управления разрешило мои проблемы.

<asp:UpdatePanel runat="server" ID="StatusUpdatePanel"> 
<ContentTemplate> 

    <ul Class="Errors"> 
    <asp:ListView runat="server" ID="ErrListView"> 
     <ItemTemplate><li><%# Container.DataItem %></li></ItemTemplate> 
    </asp:ListView> 
    </ul> 

</ContentTemplate> 
</asp:UpdatePanel> 
Смежные вопросы