【问题标题】:Ajax inside MOSS 2007 Web PartMOSS 2007 Web 部件中的 Ajax
【发布时间】:2010-08-03 20:04:59
【问题描述】:

我正在 MOSS 2007 中创建一个包含自动完成扩展器的 Web 部件。

通过在 web.config 中添加所有配置,我的网站启用了 ajax(例如 here

我的网络服务:

    [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();
         }
   }

我可以通过网络浏览器访问网络服务。但是,自动完成扩展器不会调用我的网络服务。

我的网络服务 url:http://[myserver]/AutoComplete.asmx(我将它用于扩展器的 ServicePath)。 我的网页:http://[myserver]/Pages/mypage.aspx

我还尝试在页面上添加一个日历扩展器,日历呈现在文本框下方并显示为内联 html。很奇怪。

任何想法都会有所帮助。

谢谢

【问题讨论】:

    标签: c# asp.net ajax web-services sharepoint


    【解决方案1】:

    从您的网络服务网址看来,您已将网络服务放入您网站的根文件夹中。这将不起作用,因为此文件夹由 SharePoint VirtualPathProvider 处理,它将在内容数据库中查找文件。

    你应该把你的 web 服务放到一个子目录或者 12Hive\ISAPI 或者 12Hive\LAYOUTS 然后通过相应的调用它

    http://[myserver]/_vti_bin/[Folder]/AutoComplete.asmx 
    

    http://[myserver]/_layouts/[Folder]/AutoComplete.asmx 
    

    【讨论】:

    • 我在 _layouts 文件夹中也试过了,但它仍然不会调用我的网络服务。
    • 您是否尝试浏览到 http://[myserver]/_layouts/[Folder]/AutoComplete.asmx?如果可行,请尝试使用 Fiddler (www.fiddler2.com) 看看发生了什么。如果只有一个请求通过,那么您应该寻找“SharePoint Panel Fix”
    • 我能够在 _layouts 文件夹中浏览我的网络服务。我的 Web 部件中也有 UpdatePanel 修复程序。似乎有一个覆盖 Ajax 的 SharePoint 功能。我不确定是什么。
    【解决方案2】:

    如果您使用 AJAX,我无法理解您为什么需要 Web 服务?您可以将代码放入您的 Web 部件(或您构建的任何内容)中,然后在更新面板中进行回发以获取值。更容易实现/安装/调试/支持。

    当然,关于网络服务的位置,前面的答案是正确的。我只是可以补充一点,通常的位置是 _vti_bin,而不是您通常放置自定义 ASPX 页面的布局,但当然从技术上讲两者都可以工作。

    请记住,您还应该使用代码或母版页标记向页面添加脚本管理器,否则无论您是否在 web.config 中添加了 AJAX,它都无法正常工作

    【讨论】:

    • 我在页面上有scriptmanager,甚至添加了一个服务引用。
    • 考虑不使用网络服务。你能确认服务器端代码在 AJAX 提交上运行吗?
    • 我不确定您说的是哪个服务器端代码。但是,为了解释我使用 Web 服务的原因,自动完成扩展器通过使用页面方法或 Web 服务来获取建议。据我所知,没有办法在 Web 部件中创建静态页面方法。 Web 服务是剩下的解决方案。如果服务器端代码是指将扩展器添加到 Web 部件控件的部分,那么是的,它运行并将扩展器添加到页面。
    猜你喜欢
    • 2011-11-18
    • 2010-12-03
    • 2011-08-26
    • 2010-11-16
    • 1970-01-01
    • 2013-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多