AjaxManager_AjaxRequest只能修改其UpdatePanel中的控件,还是可以在响应中发送回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服务。
无论如何都要做我要问的事情?
答案 0 :(得分:2)
是的,这可能。实际上存在两种可用的解决方案。第一个是使用jQuery ajax方法发送ajax请求(您可以使用$telerik.$
访问jQuery功能)。这种方法的唯一缺点是目标服务器端方法必须是静态的,您不能访问页面的ViewState以及服务器控件的属性值。另一种方法是在RegisterDataItem
方法中使用ScriptManager的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);
}