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

ええ、これは可能です。実際には、2つの利用可能なソリューションがあります。1つ目は、jQuery ajaxメソッドを使用してajaxリクエストを送信することです(jQuery機能にアクセスするには$telerik.$)。このアプローチの唯一の欠点は、ターゲットサーバー側のメソッドが静的である必要があり、ページのViewStateとサーバーコントロールのプロパティ値にアクセスできないことです。別のアプローチは、メソッドでScriptManagerのRegisterDataItemメソッドを使用して、 AjaxManager_AjaxRequestJSONでシリアル化されたオブジェクトをクライアントに返し、クライアント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 に答える