【问题标题】:Textbox with autocomplete具有自动完成功能的文本框
【发布时间】:2010-11-14 08:55:57
【问题描述】:

我正在使用 Visual Studio 2008 进行编程,并使用带有 C# 的 .NET Framework 3.5 制作 Web 应用程序。所有 DAL 都与一个强大的实体框架包装器链接(类似于 VS.net 2010 将使用的那个)。我有一个用于搜索名字和姓氏的文本框。我遇到的问题是我正在使用 AJAX Control Toolkit 2.0,它提供了一个自动完成扩展器,但是通过使用 WebServices (asmx)。有没有其他方法可以在不使用网络服务的情况下使用自动完成?

问候,

西蒙

P.s.:对不起我的英语,我尽力了:)!

【问题讨论】:

    标签: c# asp.net entity-framework autocomplete ajaxcontroltoolkit


    【解决方案1】:

    是的,您可以将代码隐藏文件中的方法标记为网络方法:

       public partial class Products : System.Web.UI.Page 
       { 
         [System.Web.Services.WebMethod()] 
          [System.Web.Script.Services.ScriptMethod()] 
          public static string[] GetTerms(string prefix) 
          {
            // Put your logic here
          }
       }
    

    ASP.NET AJAX callbacks to Web Methods in ASPX pages

    此外,如果您使用 NET 3.5,则可以使用包含 the ComboBox 的更高版本的 Toolkit,它本质上是一个数据绑定自动完成控件。

    【讨论】:

      【解决方案2】:

      您不需要实现单独的网络服务来提供具有自动完成功能的文本框,但是,您确实需要为自动完成扩展程序提供有效的 Web 方法,它可以用来调用以检索匹配条目的列表。

      AutoComplete Extender 控件的 AutoComplete 功能的关键属性是 ServiceMethod 和 ServicePath 属性。 ServiceMethod 指定 web 方法 的名称,由 AJAX 框架调用以检索自动完成下拉列表的匹配项,ServicePath 属性指定将包含的文件的完整路径和文件名ServiceMethod 属性的方法。但是请注意,ServicePath 属性是可选的。

      如果省略 ServicePath 属性,AJAX 框架将尝试在文本框和自动完成扩展程序所在的实际网页中的代码中查找 ServiceMethod Web 方法。这通常在“代码隐藏”文件中。

      来自AutoComplete Sample 页面:

      • ServiceMethod - 要调用的 Web 服务方法。的签名 此方法必须符合以下条件:

      [System.Web.Services.WebMethod]
      [System.Web.Script.Services.ScriptMethod]
      public string[] GetCompletionList(string prefixText, int count)
      { ... }

      请注意,您可以替换 “GetCompletionList”,名称为 您的选择,但返回类型和 参数名称和类型必须准确 匹配,包括大小写。

      • ServicePath - 扩展程序将从中提取单词\句子补全的 Web 服务的路径。 如果没有提供,服务方法应该是页面方法。

      【讨论】:

      • 啊太棒了!!非常感谢,对我帮助很大。我正在尝试......嘿嘿,现在:)!
      【解决方案3】:

      如果你不介意使用一些JavaScript,让你的手有点脏,那么你可以使用jQuery或Prototype的自动完成插件,然后你可以使用页面返回数据或Webservice。见jqery AutoComplete demo

      【讨论】:

        【解决方案4】:

        好吧...也许我只是不明白这个控件是如何工作的。这是我的代码:

        默认.aspx

            <asp:ScriptManager ID="ScriptManager1" runat="server" />
            <asp:TextBox ID="TextBox1" runat="server" />
            <cc1:AutoCompleteExtender ID="AutoCompleteExtender1" runat="server" 
                ServiceMethod="GetCompletionList" ServicePath="Codes/Utility.cs" 
                TargetControlID="TextBox1" UseContextKey="True" CompletionInterval="100" 
                MinimumPrefixLength="1">
            </cc1:AutoCompleteExtender>
        

        ~/Codes/Utility.cs

            public class Utility {
        
            [System.Web.Services.WebMethod]
            [System.Web.Script.Services.ScriptMethod]
            public string[] GetCompletionList(string prefixText, int count) {
                return new string[] { "Bruno", "Simon", "Joanie", "Noémie", "Johanne", "Serge", "France", "Jacques", "Mylène" };
            }
        
        }
        

        但是当我在文本框中输入时,什么都没有显示...嗯。不知道该怎么办。

        【讨论】:

        • 记得将 EnablePageMethods="true" 属性添加到您的脚本管理器中。此外,如果您使用页面方法,则应删除 AutoCompleteExtender 的 ServicePath 属性(请参阅ajaxcontroltoolkit.com/AutoComplete/AutoComplete.aspx 的文档)
        • 哦,对不起,它通过了!但是,我的页面上没有显示“自动完成”。
        • 哦,太好了!它的工作!那个 Dan Diplo,我忘了放 EnablePageMethods。
        猜你喜欢
        • 2023-03-16
        • 2015-08-30
        • 1970-01-01
        • 2011-06-06
        • 1970-01-01
        • 2020-09-04
        • 1970-01-01
        • 2017-04-24
        • 1970-01-01
        相关资源
        最近更新 更多