Может ли пустой AjaxManager_AjaxRequest отправить данные JSON обратно в браузер?

Может ли AjaxManager_AjaxRequest изменять только элементы управления в своих элементах UpdatePanels или может также отправлять обратно данные JSON в ответе. В идеале просто данные JSON.

Так что в моем ASCX у меня есть

protected void Page_Load(object sender, EventArgs e)
{
    RadAjaxManager radAjaxManager = RadAjaxManager.GetCurrent(Page);

    if (radAjaxManager != null)
    {
        radAjaxManager.AjaxRequest += AjaxManager_AjaxRequest;
    }

}

private void AjaxManager_AjaxRequest(object sender, AjaxRequestEventArgs e)
{
   // Somehow tweak it so response is just a JSON object.
}

Я просто унаследовал некоторый унаследованный код, и для меня это самый быстрый способ достичь своей цели, не создавая веб-сервис для этого.

Есть ли способ сделать то, что я спрашиваю?

1 ответ

Решение

Да, это возможно. На самом деле существует два доступных решения. Первый - отправить ajax-запрос с помощью jQuery ajax-метода (доступ к функциональности jQuery можно получить с помощью $telerik.$). Единственным недостатком этого подхода является то, что целевой серверный метод должен быть статическим, и вы не можете получить доступ к ViewState страницы, а также к значениям свойств серверного элемента управления. Альтернативный подход заключается в использовании ScriptManager's. RegisterDataItem метод в AjaxManager_AjaxRequest метод, чтобы передать JSON-сериализованный объект обратно клиенту и получить его в Sys.WebForms.PageRequestManagerОбработчик события endRequest на клиенте.

<asp:ScriptManager ID="ScriptManager1" runat="server" />
<script type="text/javascript">
    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler);

    function endRequestHandler(sender, args) {
        var dataItems = args.get_dataItems();
        if (dataItems && dataItems["<%= RadAjaxManager1.UniqueID %>"]) {
            alert(dataItems["<%= RadAjaxManager1.UniqueID %>"].Response);
        }
    }
</script>
<telerik:RadAjaxManager ID="RadAjaxManager1" runat="server" />


void AjaxManager_AjaxRequest(object sender, Telerik.Web.UI.AjaxRequestEventArgs e)
{
    ScriptManager1.RegisterDataItem(radAjaxManager , new JavaScriptSerializer().Serialize(new { Response = "Hello, RadAjaxManager!" }), true);
}
Другие вопросы по тегам