Подтвердить что ты не робот

LinkButton в ListView в UpdatePanel вызывает полную обратную передачу

У меня есть LinkButton в ListView в UpdatePanel. Я хотел бы, чтобы кнопка (ну, любая из них) вызывала частичную обратную передачу, но они вызывают полную обратную передачу страницы.

<asp:UpdatePanel ID="upOutcomes" UpdateMode="Conditional" runat="server">
  <ContentTemplate>
      <asp:ListView ID="lvTargets" runat="server" onitemdatabound="lvTargets_ItemDataBound">
        <ItemTemplate>
          <asp:LinkButton ID="lnkAddTarget" CssClass="lo" Text='<%# Eval("Title") + " <b>" + Eval("Level") + Eval("SubLevel") + "</b>" %>' runat="server"></asp:LinkButton>
        </ItemTemplate>
      </asp:ListView>
  </ContentTemplate>
</asp:UpdatePanel>

Я нашел еще одно сообщение о stackoverflow, которое предложило добавить это:

protected void lvTargets_ItemDataBound(object sender, ListViewItemEventArgs e) {
  var lb = e.Item.FindControl("lnkAddTarget") as LinkButton;
  tsm.RegisterAsyncPostBackControl(lb);  // ToolkitScriptManager
}

Это не повлияло...

Есть и несколько других подобных сообщений, но я не могу найти решение! Любые идеи?

4b9b3361

Ответ 1

Параметр ClientIDMode в ASP.NET 4 позволяет указать, как ASP.NET генерирует атрибут id для элементов HTML.

В предыдущих версиях ASP.NET(т.е. pre 4) поведение по умолчанию было эквивалентно настройке AutoID ClientIDMode. Однако настройка по умолчанию теперь предсказуема.

Прочитать статью Microsoft

Для этого требуется AutoId из-за того, как менеджер script ожидает, что элементы управления HTML будут созданы в предыдущих версиях .NET.

Ответ 2

Попробуйте добавить атрибуты CommandName, CommandArgument и обработчик события OnCommand к вашей ссылке:

<asp:LinkButton CommandName='test' CommandArgument='<%# Eval("Title") %>' ID="lnkAddTarget" runat="server" OnCommand="LinkButtonCommandEventHandler" />

Или - добавление обработчика OnItemCommand для всего ListView.

Ответ 3

Я решил эту проблему, установив: ClientIDMode = "AutoID" в директиве страницы применимой страницы следующим образом: <%@ Page Title="" ClientIDMode="AutoID" Language="C#"%>, тем самым разрешив мою предыдущую проблему наличия ASP-ссылки в ListView, чтобы вызвать полную обратную передачу.

Однако для этого может потребоваться, чтобы любой элемент управления ASP на клиентском коде (JQuery, Javascript) назывался полным именем, как он отображается в исходном коде браузера (я использую Firebug в Firefox для получения имен). Например, эта функция JQuery $("#ContentPlaceHolder1_btnCancelReferCustomer").click(function () { $("#divRefer").hide({ effect: "slide", duration: 200 }); return false; }); был изменен на это (обратите внимание на изменение имени кнопки asp в селекторе): $("#ctl00_ContentPlaceHolder1_btnCancelReferCustomer").click(function () { $("#divRefer").hide({ effect: "slide", duration: 200 }); return false; });

Ответ 4

Я решил эту проблему, установив: ClientIDMode = "AutoID" в директиве страницы соответствующей страницы следующим образом: <% @Page title="" ClientIDMode = "AutoID" Язык = "С#"% >