一直没怎么去仔细研究 ASP.NET AJAX Control Toolkit,昨天要写一个东西用到了其中的 DynamicPopulateExtender 控件。该控件的作用,是可以异步调用服务器端的方法返回一段 HTML,更新指定的控件内容。通常用 asp:Panel 来配合使用。
下面是简单的 Markup:
其中 ServiceMethod 属性指定了对应的 WebService 方法,可用当前页面上的某个方法加上标签实现:
客户端在需要的时候可以用 JavaScript 去触发这个内容更新。代码如下:
这里的参数名 contextKey 我原先写的不是这个,结果一直报 "WebService 调用错误: 500" 或者 12031 之类的错误。
开始,以为是 Authentication 的问题,但是在 web.config 里禁用了 FormsAuthentication 错误信息依旧。
最终发现原来这个 contextKey 这个参数名必须一字不差,而且参数个数也只能一个。WebService 方法的签名也要完全一样。只有参数名可改。
下面是简单的 Markup:
<
asp:Panel
ID
="panelPrintLinks"
runat
="server"
>
test
</ asp:Panel >
< cc1:DynamicPopulateExtender ID ="dp1"
runat ="server" Enabled ="True"
TargetControlID ="panelPrintLinks"
ServiceMethod ="GetPrintLinks" >
</ cc1:DynamicPopulateExtender >
test
</ asp:Panel >
< cc1:DynamicPopulateExtender ID ="dp1"
runat ="server" Enabled ="True"
TargetControlID ="panelPrintLinks"
ServiceMethod ="GetPrintLinks" >
</ cc1:DynamicPopulateExtender >
其中 ServiceMethod 属性指定了对应的 WebService 方法,可用当前页面上的某个方法加上标签实现:
public
partial
class
ViewNodes: PageBase
{
[WebMethod()]
[ScriptMethod()]
public static string GetPrintLinks( string contextKey)
{
return " <a href='http://www.google.com'>Google</a> " ;
}
}
{
[WebMethod()]
[ScriptMethod()]
public static string GetPrintLinks( string contextKey)
{
return " <a href='http://www.google.com'>Google</a> " ;
}
}
客户端在需要的时候可以用 JavaScript 去触发这个内容更新。代码如下:
<
script
type
="text/javascript"
>
function ShowPrintLinks(contextKey)
{
var behavior = $find( ' dp1 ' );
if (behavior)
{
behavior.populate(contextKey);
}
}
</ script >
function ShowPrintLinks(contextKey)
{
var behavior = $find( ' dp1 ' );
if (behavior)
{
behavior.populate(contextKey);
}
}
</ script >
这里的参数名 contextKey 我原先写的不是这个,结果一直报 "WebService 调用错误: 500" 或者 12031 之类的错误。
开始,以为是 Authentication 的问题,但是在 web.config 里禁用了 FormsAuthentication 错误信息依旧。
最终发现原来这个 contextKey 这个参数名必须一字不差,而且参数个数也只能一个。WebService 方法的签名也要完全一样。只有参数名可改。