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
}
Это не повлияло...
Есть и несколько других подобных сообщений, но я не могу найти решение! Любые идеи?
Ответы
Ответ 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" Язык = "С#"% >