DynamicPopulateExtender 控件调 WebService 的500错误

一直没怎么去仔细研究 ASP.NET AJAX Control Toolkit,昨天要写一个东西用到了其中的 DynamicPopulateExtender 控件。该控件的作用,是可以异步调用服务器端的方法返回一段 HTML,更新指定的控件内容。通常用 asp:Panel 来配合使用。

下面是简单的 Markup:

    <asp:Panel ID="panelPrintLinks" runat="server">
        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>";
    }
}

客户端在需要的时候可以用 JavaScript 去触发这个内容更新。代码如下:

    <script type="text/javascript">
        
function ShowPrintLinks(contextKey)
        {
            
var behavior = $find('dp1');
            
if (behavior)
            {
                behavior.populate(contextKey);
            }
        }    
    
</script>

这里的参数名 contextKey 我原先写的不是这个,结果一直报 "WebService 调用错误: 500" 或者 12031 之类的错误。
开始,以为是 Authentication 的问题,但是在 web.config 里禁用了 FormsAuthentication 错误信息依旧。
最终发现原来这个 contextKey 这个参数名必须一字不差,而且参数个数也只能一个。WebService 方法的签名也要完全一样。只有参数名可改。

posted @ 2008-06-12 10:35 木野狐(Neil Chen) 阅读(219) 评论(1)  编辑 收藏 所属分类: ASP.NET AJAX

  回复  引用  查看    
#1楼 [楼主]2008-06-12 15:57 | 木野狐(Neil Chen)      
总结引起 500 错误可能导致的原因:

1. Authentication
2. contextKey 参数名不对。
3. 没有将服务器端方法设置为 static
4. 没有给服务器端方法添加 [WebMethod] 标签。

同样的情况适用于 DropDownExtender 的 DynamicServiceMethod.

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-07-25 12:58 编辑过


相关链接: