Полный постбэк при выборе и удалении на панели обновления - PullRequest
0 голосов
/ 25 апреля 2018

У меня проблемы с текстовым полем asp.net на панели обновлений.Он прекрасно работает при добавлении или удалении каждого отдельного символа, но если я выделю весь текст в текстовом поле, а затем удалю его, произойдет полная обратная передача, а не частичная обратная передача, которая ожидается.

Почему это происходит?Я не нашел ничего связанного с этой конкретной проблемой, поэтому, скорее всего, я делаю что-то не так.

Пример aspx:

<asp:UpdatePanel ID="updExample" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true">
  <ContentTemplate>
    <asp:Repeater ID="rptExample" runat="server" .... >
      <ItemTemplate>
        <asp:TextBox ID="txtExample" runat="server" ClientIDMode="static" Text='<%# Eval("Example") %>' OnTextChanged="txtExample_TextChanged" AutoPostBack="true"></asp:TextBox>
      </ItemTemplate>
    </asp:Repeater>
  </ContentTemplate>
</asp:UpdatePanel>

Пример события TextChanged:

protected void txtExample_TextChanged(object sender, EventArgs e)
{
   updExample.Update();
}

Дополнительные примечания:

  • Переключение режима обновления на «Всегда» не работает.

1 Ответ

0 голосов
/ 25 апреля 2018

Картикеян Нагарадж указал в комментариях, чтобы попытаться добавить триггеры наряду с тем, что у меня уже было. У меня уже было это, однако я назначал триггер в событии ItemDataBound, которое, как я понял, было неверным после повторного расследования. Событие ItemCreated было гораздо более подходящим.

У меня не было проблем с поиском элемента управления в событии ItemCreated, однако добавление нового триггера асинхронной обратной передачи на панель обновления вызвало у меня горе и сказало, что элемент управления не может быть найден при изменении текста. Чтобы решить эту проблему, я использовал менеджеры скриптов RegisterAsyncPostBackControl (); метод, как показано ниже.

protected void rptExample_ItemCreated(object sender, RepeaterItemEventArgs e)
{
   var input = e.item.FindControl("txtExample");

   if (input != null) {
     ScriptManager sm = ScriptManager.GetCurrent(this);
     sm.RegisterAsyncPostBackControl(input);
   }
}
...