我环顾四周,还没有找到解决问题的方法。我有一个PopupControlExtender,它不断给出"Web服务调用失败:500"错误,而不是显示弹出窗口。我有一个带有OnItemCreate属性的数据网格,它可以正确地为列中的图像分配mouseouver和mouseout属性。下面是包含targetControl图像和AJAX控件本身的列的代码。
以下是ajax控件的代码:
<asp:TemplateColumn
HeaderText="Notes"
SortExpression="note"
ItemStyle-VerticalAlign="Top"
HeaderStyle-HorizontalAlign="Center"
HeaderStyle-CssClass="colNotes"
ItemStyle-HorizontalAlign="Center"
ItemStyle-CssClass="colNotes">
<ItemTemplate>
<asp:Label ID="lblNotes" Runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "note") %>'></asp:Label>
<%--<asp:HyperLink ID="lnkNotes" Visible='<%# DataBinder.Eval(Container.DataItem, "has_note") %>' Runat="server" Text="..." /> --%>
<asp:Image ID="lnkNotes" runat="server" Visible='<%# DataBinder.Eval(Container.DataItem, "has_note") %>' ImageUrl="http://www.ezzylearning.com/tutorials/demos/images/magnify.gif" />
<ajax:PopupControlExtender ID="PopupControlExtender1" runat="server"
PopupControlID="pnlPopupNotes"
TargetControlID="lnkNotes"
DynamicContextKey='<%# Eval("person_id") +","+Eval("group_id") %>'
DynamicControlID="pnlPopupNotes"
DynamicServiceMethod="GetDynamicContent" Position="Bottom">
</ajax:PopupControlExtender>
</ItemTemplate>
</asp:TemplateColumn>
以下是DynamicServiceMethod的代码(我有意将其简化为一个简单的跨度,只是为了尝试显示一些内容)。。。
[System.Web.Services.WebMethodAttribute(),
System.Web.Script.Services.ScriptMethodAttribute()]
public static string GetDynamicContent(string contextKey)
{
StringBuilder b = new StringBuilder();
b.Append("<span>Hello!</span>");
return b.ToString();
}
这是我用作PopupControlID的面板。。。
<asp:Panel ID="pnlPopupNotes" runat="server">
因此,通过这个设置,我成功地获得了mouseover/mousout行为,但在我希望看到跨度弹出的地方,我看到了一条"Web服务调用失败:500"的消息。你知道我可能错过了什么吗?
编辑:
我发现问题出在如何从页面调用web服务上。web服务实际上是在同一页面上的用户控件内构建的。当我把鼠标移到web服务调用时,我看到它为访问web服务器而创建的URL是http://mydomain/default.aspx/GetDynamicContent
,它应该更像http://mydomain/default.aspx/Usercontrols/parentUserControl.ascx/GetDynamicContent
。但是,我不知道如何修改它调用的URL。我尝试将DynamicServiceMethod属性值从"GetDynamicContent"更改为http://mydomain/default.aspx/UserControls/parentUserControl.ascx/GetDynamicContent
,但这只是一团糟。
我希望这次编辑能给能帮助我的人更多的见解。
我想这是我自己想出来的。使用调试控制台,我可以看到mouseover正在向主页(我无法操作其代码)发出web服务调用,并调用web服务方法。实际上,我已经在页面使用的用户控件(.ascx)中创建了Web服务。这似乎不起作用。我最终完全剥离了web服务,并创建了自己的.asmx文件,然后添加了DynamicServicePath属性以指向独立的web服务。我希望我能求助于一个完全独立的网络服务,但无论如何,它是有效的。
如果在同一页上声明(DynamicServiceMethod)方法,则该方法应为"static">,但是,如果该方法托管在(DynamicServicePath").asmx上,则不应声明该方法为'static'
这不容易调试和弄清楚。。
通常,当我们的查询中出现任何错误时,会显示Web服务调用失败500。。我已经通过检查查询中的错误并更正它来解决这个问题。。更正错误后,我们的查询弹出控件将显示。。