在不使用webservice的情况下在文本框上自动完成扩展程序

时间:2010-03-11 06:01:40

标签: .net asp.net asp.net-ajax c#-3.0

我不想使用Web服务来填充文本框中的自动完成扩展程序。在这种情况下,它是用户输入国家/地区名称的地方,我不想每次都去数据库。我宁愿将一个集合保持在会话状态,并将自动完成“绑定”到那个。

是否可以将ServicePath和/或ServiceMethod设置为代码隐藏中的某些内容而不是Web服务?

此致 库马尔

4 个答案:

答案 0 :(得分:1)

不幸的是,除了入侵javascript以阻止浏览器拨打电话获取列表之外,没有直接的选择。

我能看到的另一个选择是创建一个网络服务&使用EnableCaching的{​​{1}}属性,以确保Web服务的结果缓存在客户端上,从而避免调用webservice(和数据库)。

编辑:再想一想,我认为可以在页面中使用AutoCompleteExtender属性&标记公共静态方法。将WebMethod设置为您的aspx页面。

看看这是否有帮助 - http://blogs.msdn.com/sburke/archive/2006/10/21/hint-components-that-use-web-services-with-asp-net-ajax-v1-0-beta.aspx

我认为它应该有效。但我不确定,如果框架要求它是 webservice。

答案 1 :(得分:0)

您的国家/地区列表是否会更改,或因用户而异?将它置于会话状态似乎没有意义。我不明白为什么你应该为此服务器。

考虑将所有值直接渲染到HTML中,然后使用Javascript完全在客户端自动完成。

答案 2 :(得分:0)

您可以在现有Web项目中使用本地asmx文件并连接到该文件。在那里你可以放置你需要的任何逻辑,这样你就不必在不想要的情况下点击数据库了。这真的就像另一个网页应该没有问题访问会话状态。

答案 3 :(得分:0)

你可以将onclientpopulating属性设置为你的本地javascript函数,例如onclientpopulating =“onPopulating”,然后在js函数中提供本地数据而不是点击web服务。下面是我使用的实现之一,它永远不会访问Web服务。 completionData变量保存所有数据,我根据用户在文本框中输入的内容迭代查找匹配项。这是一个古老的例子。如果我现在实施它,我可能会做的不同。

    function onPopulating(ace, args)
    {
       var prefixText = ace._currentCompletionWord();
       var filteredItems = GetFilteredItems(prefixText);
       ace._update(prefixText,filteredItems,false);
       args.set_cancel(true);

    }

    function GetFilteredItems(prefixText)
    {
        var filteredItems = []; 
        for (var nCount=0; nCount < completionData.length; nCount ++)
        {
            if (completionData[nCount].startsWith(prefixText))
            {
                Array.add(filteredItems,completionData[nCount]);

            }
        }
        return filteredItems; 
    }