2

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.
}

我只是继承了一些遗留代码,这是我在不创建 Web 服务的情况下实现目标的最快方法。

反正有没有做我要求的?

4

1 回答 1

2

是的,这可能。实际上存在两种可用的解决方案。第一个是使用 jQuery ajax 方法发送 ajax 请求(您可以使用 访问 jQuery 功能$telerik.$)。这种方法的唯一不足是目标服务器端方法必须是静态的,并且您不能访问页面的 ViewState 以及服务器控件的属性值。另一种方法是在方法中使用 ScriptManager 的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);
}
于 2012-08-23T20:19:53.020 回答