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

Частичная обратная передача с помощью Javascript

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

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

Спасибо.

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

4b9b3361

Ответ 1

Вы можете использовать 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, сгенерированный автоматически с помощью триггера, будет обрабатывать остальные.

ИЗМЕНИТЬ

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

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

Ответ 2

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

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

Подробнее см. Sys.WebForms.PageRequestManager.beginAsyncPostBack Method.