Частичная обратная передача с помощью Javascript
Я не мог найти что-то подобное в SO.
В ASP.NET существует ли какой-либо способ, по которому я могу вызвать частичную обратную передачу с помощью Javascript в UpdatePanel?
Я попробовал __doPostBack()
, но он делает полную обратную передачу.
Я могу обмануть его с помощью фиктивной кнопки и запустить click()
, а затем обработать частичную обратную передачу таким образом, но я хочу более грациозный путь, чем обман.
Спасибо.
Изменить: я нашел этот disturbedbuddha.wordpress.com/2007/11/26/... но я не могу заставить его работать = (
Я хотел бы, чтобы этот метод работал; это идеально для меня!
До сих пор то, что я могу сделать с помощью этого последнего метода, - это ссылка на таймер. Когда таймер изначально отключен, запуск таймера не вызывает обратной передачи. Тем не менее, без Ajax, если я просто включил таймер вначале, он возвращается с интервалами просто отлично; почему не может вызвать вызов Ajax?
Ответы
Ответ 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.