none
Autocomplete的问题 RRS feed

  • 问题

  •  我在VS 2005里面建了一个AjaxControlTool的网站,里面放了一个TextBox,和1个WaterMark控件和1个Autocomplete控件。Autocomplete控件读取得数据来自txt文件。在VS环境中用Ctrl+F5查看一切ok, autocomplete会自己出现下拉菜单。但是当我在IIS里面建一个虚拟目录,把虚拟目录指向刚才建的这个网站,在IE里面访问,却发现watermark控件有效,但是autocomplete控件却没了反应,不会出现下拉菜单了,但是IE也没有脚本出错的提示。谁能帮忙解答,万分感谢!!!

    2008年10月16日 1:24

答案

  • 你的代码看了,
    代码在Firefox下完全正常,在Ie8下只有第一次出现下拉,后面再输入就不出现了了。

    你的dll是比较老大,是1.0版本的,现在最新的版本是3.0
    下载的地址
    http://www.codeplex.com/AjaxControlToolkit/Release/ProjectReleases.aspx?ReleaseId=16488#ReleaseFiles


    http://www.asp.net/AJAX/AjaxControlToolkit/Samples/AutoComplete/AutoComplete.aspx
    测试,IE8下报告脚本错误,FF下完全正常。

    所以这个东西的兼容性还是值得怀疑的。

    由于AjaxControlToolkit.dll是别人写的,尽管有源代码可以下载,一会半会也改不过来。你可以给他们报告Bug。
    如果需要此功能,建议自己写,好处有2个:代码少,精简;改起来容易。

    另外,网上也有很多单独的
    autocomplete下载的
    2008年10月17日 2:34
    版主

全部回复

  • 看代码。单纯看描述很难知道你的错误在哪
    2008年10月16日 1:41
    版主
  • 这个是配合autocomplete控件的asmx代码 using System;


    using System;
     2using System.Web;
     3using System.Collections;
     4using System.Web.Services;
     5using System.Web.Services.Protocols;
     6using System.IO;
     7
     8
     9/// <summary>
    10/// AutoComplete 的摘要说明
    11/// </summary>

    12[WebService(Namespace = "http://tempuri.org/")]
    13[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    14[System.Web.Script.Services.ScriptService]
    15public class AutoComplete : System.Web.Services.WebService {
    16
    17    public AutoComplete () {
    18
    19        //如果使用设计的组件,请取消注释以下行 
    20        //InitializeComponent(); 
    21    }

    22
    23    [WebMethod]
    24    public string HelloWorld() {
    25        return "Hello World";
    26    }

    27    /// <summary>
    28    /// 获取数据的方法GetCompleteList
    29    /// </summary>

    30    //定义静态数组用于保存获取的数据
    31    private static string[] autoCompleteWordList = null;
    32    [WebMethod]
    33    public String[] GetCompleteList(string prefixText, int count)
    34    {
    35        if (autoCompleteWordList == null)
    36        {
    37            string[] temp = File.ReadAllLines(Server.MapPath("~/App_Data/TextFile.txt"));
    38            Array.Sort(temp, new CaseInsensitiveComparer());
    39            autoCompleteWordList = temp;
    40        }

    41
    42        int index = Array.BinarySearch(autoCompleteWordList, prefixText, new CaseInsensitiveComparer());
    43        if (index < 0)
    44        {
    45            index = ~index;
    46        }

    47
    48        int matchingCount;
    49        for (matchingCount = 0; matchingCount < count && index + matchingCount < autoCompleteWordList.Length; matchingCount++)
    50        {
    51            if (!autoCompleteWordList[index + matchingCount].StartsWith(prefixText, StringComparison.CurrentCultureIgnoreCase))
    52            {
    53                break;
    54            }

    55        }

    56        String[] returnValue = new string[matchingCount];
    57        if (matchingCount > 0)
    58        {
    59            Array.Copy(autoCompleteWordList, index, returnValue, 0, matchingCount);
    60        }

    61        return returnValue;
    62    }

    63
    64}

     

    在default.aspx里面Autocomplete控件的属性

    <ajaxToolkit:AutoCompleteExtender 
                ID
    ="AutoCompleteExtender1" 
                runat
    ="server" 
                ServiceMethod
    ="GetCompleteList" 
                ServicePath
    ="oec2003_AutoComplete.asmx" 
                Enabled
    ="true" 
                MinimumPrefixLength
    ="2" 
                   CompletionSetCount="10"
                TargetControlID
    ="TextBox1">
    </ajaxToolkit:AutoCompleteExtender>

     

     在VS里面调试ok的,但访问虚拟目录就不行了

    2008年10月16日 1:56
  • 分析问题的方法:
    你的TextBox事件(就是触发下列的那个),发送请求的地址打印出看是否是正确的,
    打印出AutoComplete.asmx的数据是否正确返回了,应该不是oec2003_AutoComplete.asmx这个服务代码的问题,估计是url或者你调用的服务地址的配置问题。

    2008年10月16日 2:04
    版主
  • 孟老师,能再说的详细点吗?如何看发送请求的地址是否正确?

    不在VS环境下怎么看asmx的数据是否返回?我在VS环境下能看到asmx有数据正确返回的

    你说的调用的服务地址配置问题,是指IIS的问题吗?

    2008年10月16日 2:13
  • 你可以加一些代码,比如,这种功能一般是XMLHttpRequest做的,你就alert()出请求的地址,然后alert()出返回的内容。如果是服务端的,你可以在页面上使用Literal之类的控件显示出每一步执行的结果。
    问题可能是出在发送请求和得到返回结果上,如果返回结果正确,那就再看看生成下列层的代码是不是有问题。

    Firefox有个插件Firebug,使用FF调试脚本比较方便,或者使用VS的断点调试脚本都可以。

    另外,没有错误提示,看看ie设置是否允许了脚本调试和现实脚本的错误通知,也可能出错了没有显示。
    2008年10月16日 3:25
    版主
  • 我在

    public string[] GetCompleteList(string prefixText,int count)

    {

     

    ....

     

    }

     

    里面一开头就加了一句MessageBox.Show("ok");

    在VS环境里Ctrl+F5调试,当在TextBox里输入字符,马上会弹出ok对话框

    但是我在IE访问127.0.0.1/xxx时,同样在TextBox里输入字符,就不会出现ok对话框,说明autocomplete控件根本就没起反应。

     

    然后我打开AjaxControlToolkit自己的包,里面有个SampleWebSite目录,同样的,我在VS环境里Ctrl+F5调试autocomplete控件,一切正常 ,但是当我用IE访问127.0.0.1/SampleWebSite时,这个autocomplete也不起作用了,这可是ajax自己带的sample例子,我想应该跟源码没问题吧,但是就是不明白为什么用127.0.0.1/xxx访问时,autocomplete控件会不起作用。

     

    请教孟老师,小弟我真的郁闷死了

    2008年10月16日 12:54
  • 请发你程序到 amxh@21cn.com我看看。

    最好将程序进行精简,为方便调试,尽量以最少的代码重现你的问题

     

    2008年10月16日 13:22
    版主
  •  

    有发了,目前状况就是在VS里面调试正常,但是以127.0.0.1/xxx访问时autocomplete就不起作用了

    请孟老师赐教,谢谢!!!

    2008年10月16日 13:58
  • 你的代码看了,
    代码在Firefox下完全正常,在Ie8下只有第一次出现下拉,后面再输入就不出现了了。

    你的dll是比较老大,是1.0版本的,现在最新的版本是3.0
    下载的地址
    http://www.codeplex.com/AjaxControlToolkit/Release/ProjectReleases.aspx?ReleaseId=16488#ReleaseFiles


    http://www.asp.net/AJAX/AjaxControlToolkit/Samples/AutoComplete/AutoComplete.aspx
    测试,IE8下报告脚本错误,FF下完全正常。

    所以这个东西的兼容性还是值得怀疑的。

    由于AjaxControlToolkit.dll是别人写的,尽管有源代码可以下载,一会半会也改不过来。你可以给他们报告Bug。
    如果需要此功能,建议自己写,好处有2个:代码少,精简;改起来容易。

    另外,网上也有很多单独的
    autocomplete下载的
    2008年10月17日 2:34
    版主
  • 哦,谢谢孟老师

    2008年10月17日 5:48