我正在 MOSS 2007 中创建一个包含自动完成扩展程序的 Web 部件。
我通过在 web.config 中添加所有配置来启用 ajax 功能(示例此处)
我的网络服务:
[System.Web.Script.Services.ScriptService]
public class AutoComplete : System.Web.Services.WebService
{
[System.Web.Services.WebMethod]
[System.Web.Script.Services.ScriptMethod]
public string[] GetCompletionList(string prefixText, int count)
{
List<string> results = new List<string>();
results.Add("Here");
results.Add("Here");
results.Add("Here");
results.Add("Here");
results.Add("Here");
results.Add("Here");
results.Add("Here");
return results.ToArray();
}
}
我可以从网络浏览器访问网络服务。但是,autocompleteextender 不会调用我的网络服务。
我的 Web 服务 url:http://[myserver]/AutoComplete.asmx(我将其用作扩展程序的 ServicePath)。 我的 Web 部件页面:http://[myserver]/Pages/mypage.aspx
我还尝试在页面上添加日历扩展程序,日历呈现在文本框下方并显示为内联 html。奇怪。
任何想法都会有帮助。
谢谢
从您的 Web 服务 URL 来看,您似乎已将 Web 服务放入站点的根文件夹中。这将不起作用,因为该文件夹由 SharePoint VirtualPathProvider 处理,它将在内容数据库中查找文件。
您应该将您的Web服务放入子目录或12Hive\ISAPI或12Hive\LAYOUTS中,然后通过相应的调用它
http://[myserver]/_vti_bin/[Folder]/AutoComplete.asmx
或
http://[myserver]/_layouts/[Folder]/AutoComplete.asmx
我不明白如果你使用 AJAX 为什么还需要 Web 服务?您只需将代码放入 Web 部件(或您构建的任何内容)中,然后在更新面板中进行回发以获取值。更容易实施/安装/调试/支持。
当然,关于网络服务的位置,前面的答案是正确的。我只是可以补充一点,通常的位置是 _vti_bin,而不是通常放置自定义 ASPX 页面的布局,但当然从技术上来说两者都可以工作。
请记住,您还应该使用代码或母版页标记向页面添加脚本管理器,否则它将无法工作,无论您是否在 web.config 中添加了 AJAX