下面是简单的 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 方法的签名也要完全一样。只有参数名可改。