LinkButton в ListView в UpdatePanel вызывает полную обратную передачу - PullRequest
28 голосов
/ 13 апреля 2011

У меня есть 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
}

Ничего не изменилось ...

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

Ответы [ 5 ]

38 голосов
/ 21 апреля 2011

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

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

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

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

1 голос
/ 27 июля 2018

Я решил эту проблему, установив: ClientIDMode="AutoID" в директиве соответствующей страницы, например:

<%@ Page Title="" ClientIDMode="AutoID" Language="C#"%>

Это нормально работает.

0 голосов
/ 05 июня 2016

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

0 голосов
/ 04 апреля 2013

Я решил эту проблему, установив: 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; });

0 голосов
/ 13 апреля 2011

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

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

Или - добавить обработчик OnItemCommand ко всему ListView.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...