2009-12-13 4 views
0

У меня есть UpdatePanel, который содержит ретранслятор. в ItemTemplate ретранслятора есть кнопка и метка.Ярлык не становится видимым внутри репитера внутри обновляемой панели

Когда кнопка нажата, она выполняет некоторые функции, а затем устанавливает ярлык в видимые и отключает кнопку.

Однако ни один из изменений пользовательского интерфейса не внесен на веб-страницу.

Вот код, который при пошаговом через отладчик, кажется, работает нормально:

protected void CommentRepeater_ItemCommand(object source, RepeaterCommandEventArgs e) 
{ 
    if (e.CommandName == "report") 
    { 
     (e.Item.FindControl("btnReportComment") as ImageButton).Enabled = false; 
     Label thanksLabel = (Label)e.Item.FindControl("lblReportedComment"); 
     thanksLabel.Visible = true; 
    } 

    pnlCommentsUpdater.Update(); 
} 

и код страницы (за исключение коды за пределами ретранслятора)

<asp:UpdatePanel UpdateMode="Conditional" ID="pnlCommentsUpdater" runat="server"> 
    <ContentTemplate> 
     <asp:LinkButton ID="lnkPhoto1Comments" runat="server" Text="0 Comments" OnClick="lnkPhoto1Comments_Click" CssClass="dark-gray regular bold"></asp:LinkButton>  
     <asp:Panel ID="pnlPhoto1Comments" runat="server" Visible="False"> 
     <asp:Repeater ID="Repeater1" runat="server" OnItemCommand="CommentRepeater_ItemCommand"> 
      <ItemTemplate> 
       <br /> 
       <hr width="100%" size="1" color="#CCCCCC" /> 
       <table width="534" cellpadding="0" cellspacing="0" border="0"> 
        <tr> 
         <td width="150" align="left" valign="top"> 
          <span class="blue small bold"><%# Eval("PostedBy") %>,</span><br /> 
          <span class="light-gray small bold"><%# Eval("DateCreated", "{0:g}") %></span> 
         </td> 
         <td width="20"></td> 
         <td width="252" align="left" valign="top"> 
          <div STYLE="word-wrap:break-word;width:252px;left:0"> 
           <span class="dark-gray small bold"><%# Eval("CommentText") %></span> 
          </div> 
         </td> 
         <td width="20"></td> 
         <td width="92" valign="bottom"> 
          <asp:ImageButton ID="btnReportComment" runat="server" ImageUrl="../images/inappropriate_off.png" CssClass="domclickroll images/inappropriate_on.png images/inappropriate_on.png" AlternateText="Inappropriate" CommandName="report" CommandArgument='<%#Eval("CommentId") %>' /><br /> 
          <asp:Label ID="lblReportedComment" runat="server" Visible="false" CssClass="Regular bold blue" Text="Thanks. We'll check it out!"></asp:Label> 
         </td> 
        </tr> 
       </table> 
      </ItemTemplate> 
     </asp:Repeater> 

Как я уже сказал, отладчик показывает, что он работает нормально, однако он просто не показывает ярлык в браузере после нажатия кнопки.

Кто-нибудь знает, что я делаю неправильно?

Ошибка: «Sys.WebForms.PageRequestManagerParserErrorException: сообщение, полученное с сервера, невозможно разобрать. Общими причинами этой ошибки являются ответ на изменение вызовов Response.Write(), фильтров ответов, HttpModules , или трассировка сервера включена. "

И я звоню

ScriptManager.GetCurrent(Page).RegisterPostBackControl(Repeater1); 

в загрузке страницы, которую я прочитал в некоторых местах это решение, но это не помогло.

ответ

1

Заканчивать этот блог ...

http://weblogs.asp.net/leftslipper/archive/2007/02/26/sys-webforms-pagerequestmanagerparsererrorexception-what-it-is-and-how-to-avoid-it.aspx

Он содержит ряд подходов к решению этой. Что касается вашего звонка ...

ScriptManager.GetCurrent(Page).RegisterPostBackControl(Repeater1); 

... Я думаю, вы должны пройти кнопку RegisterPostBackControl, а не повторитель. Пропустите его btnReportComment. Из приведенной выше ссылке ...

3.Call ScriptManager.RegisterPostBackControl() и передать в кнопке в вопросе. Это лучшее решение для элементов управления , которые добавляются динамически, например , которые находятся внутри повторяющегося шаблона.

+0

В каком случае обработчик я вызываю RegisterPostBackControl, находя мало информации об этом. –

+0

Получил работу, спасибо! –

0

Первый шаг - сузить вашу проблему. Если вы полностью вынимаете UpdatePanel, работает ли он нормально?

Кроме того, сразу с места в карьер Я вижу, что pnlPhoto1Comments.Visible установлен в false ...? Это правильно устанавливается где-то, я полагаю, иначе вы даже не получили бы событие ItemCommand. Так что, наверное, не проблема.

+0

Да, панель настроена на значение true, и если я выберу UpdatePanel, она будет работать правильно. Публикация об ошибке. –

Смежные вопросы