2012-08-23 34 views
2

AjaxManager_AjaxRequest是否只能修改其UpdatePanels中的控件,或者它是否也可以在響應中發送回JSON數據。理想情況下只是JSON數據。無效的AjaxManager_AjaxRequest是否可以將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服務,以正確做到這一點的最快方式。

有沒有辦法做我在問什麼?

回答

2

是的,這可能。實際上存在兩種可用的解決方案。第一個是使用jQuery ajax方法發送ajax請求(您可以通過$telerik.$訪問jQuery功能)。這種方法的唯一缺陷是目標服務器端方法必須是靜態的,並且不能訪問頁面的ViewState以及服務器控件的屬性值。另一種方法是在AjaxManager_AjaxRequest方法中使用ScriptManager的RegisterDataItem方法將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); 
} 
相關問題