Частичный постбэк с Javascript - PullRequest
16 голосов
/ 19 октября 2010

Я не мог найти что-то подобное в SO.

В ASP.NET есть ли способ, который при вызове может вызвать частичную обратную передачу с Javascript в UpdatePanel?
Я попытался __doPostBack(), но он выполняет полную обратную передачу.
Я могуобмануть его фиктивной кнопкой и запустить click(), а затем обработать частичную обратную передачу таким образом, но я хочу более изящный способ, чем обман.

Спасибо.

Редактировать: Я нашел это потревоженный_древес.wordpress.com / 2007/11/26 / ... но я не могу заставить его работать = (
Я бы хотел, чтобы этот метод работал; он идеально подходит для меня! Пока что я могу использовать этот последний метод, это получить ссылку на таймер усиления. При изначально отключенном таймере запуск таймера, по-видимому, не вызывает обратную передачуОднако без Ajax, если у меня просто изначально включен таймер, он отправляет сообщения через определенные промежутки времени, поэтому вызов Ajax не может вызвать его?

Ответы [ 2 ]

33 голосов
/ 28 октября 2010

Вы можете использовать AsyncPostBackTrigger с UpdatePanel, чтобы сделать это. Поскольку вам нужно что-то, что может вызвать событие, использование кнопки довольно просто, а когда скрыто, работает хорошо.

Если это ваша разметка:

<asp:UpdatePanel ID="UpdatePanel1" runat="server" OnLoad="UpdatePanel1_Load">
    <ContentTemplate>
        <!-- Contents... -->
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="ReloadThePanel" EventName="Click" />
    </Triggers>
</asp:UpdatePanel>
<asp:Button ID="ReloadThePanel" runat="server" style="display:none;" />

Когда вы хотите обновить панель, вам просто нужно позвонить:

__doPostBack('<%=ReloadThePanel.ClientID %>', null);

Это заставит ASP.NET думать, что ReloadThePanel был нажат, и JavaScript, автоматически сгенерированный из-за триггера, будет обрабатывать все остальное.

EDIT

Вы можете выполнить чистое обновление JavaScript UpdatePanel без каких-либо триггеров или скрытых кнопок. Вам просто нужно вызвать __doPostBack с идентификатором на стороне клиента в качестве первого аргумента.

__doPostBack('<%=UpdatePanel1.ClientID %>', null);
2 голосов
/ 25 августа 2016

Я использовал ответ @MatthewJacobs, но обнаружил, что вызов __doPostBack вызвал исключение времени выполнения в IE11. Я обнаружил, что вызов __doPostBack можно заменить следующим вызовом JavaScript, который работал в обоих протестированных мной браузерах (IE11 и Chrome 52).

Sys.WebForms.PageRequestManager.getInstance().beginAsyncPostBack(
    [ '<%=UpdatePanel1.ClientID %>' ], '<%=UpdatePanel1.ClientID %>', null
);

См. Sys.WebForms.PageRequestManager.beginAsyncPostBack Метод для получения более подробной информации.

...