【问题标题】:AutoCompleteExtender in ASP.NET additional infoASP.NET 中的 AutoCompleteExtender 附加信息
【发布时间】:2010-09-16 09:02:22
【问题描述】:

如何将附加信息传递给返回项目集合的服务方法?我将尝试解释我的意思,我在表单上有 2 个文本框,我需要根据数据库中的特定帐户 ID 填写名称。所以,我需要将一个整数传递给 getNamesForDropDown 方法。我不知道该怎么做,所以我做错了,并使用 CompletionSetCount 来实际传递我需要的信息:

[System.Web.Services.WebMethod]
[System.Web.Script.Services.ScriptMethod]
public string[] getNamesForDropDown(string prefixText, int count) 
{
   String sql = "Select fldName From idAccountReps Where idAccount = " + count.ToString();
   //... rest of the method removed, this should be enough code to understand
   //... the evil wrongness I did. 
}

在我的前端 aspx 文件中,我根据用户当前在该页面上查看的帐户 ID 设置 CompletionSetCount。

<ajaxtk:AutoCompleteExtender 
    runat="server" 
    ID="AC1" 
    TargetControlID="txtAccName"
    ServiceMethod="getNamesForDropDown"
    ServicePath="AccountInfo.asmx"
    MinimumPrefixLength="1" 
    EnableCaching="true"
    CompletionSetCount='<%# Eval("idAccount") %>'
/>

那么,这绝对是一个错误的方式......什么是正确的方式?

【问题讨论】:

    标签: asp.net ajaxcontroltoolkit autocompleteextender


    【解决方案1】:
    【解决方案2】:

    azam 有正确的想法——但自动完成方法的签名也可以有第三个参数:

    public string[] yourmethod(string prefixText, int count, string contextKey)

    您可以使用 Azam 的方法拆分 contextKey 字符串的结果,但这样您就不必担心用户输入的 .Split() 分隔符 (:) 会被过滤掉

    【讨论】:

      【解决方案3】:

      天哪,我想这就是我需要的,我发誓我在开始编程之前从未见过这个选项。这是自动完成扩展器的新属性吗?

      Excerpt from Documentation:

      ContextKey - 提供给 ServiceMethod/ServicePath 描述的 Web 方法的可选重载的用户/页面特定上下文。如果使用上下文密钥,它应该具有相同的签名,并带有一个名为 contextKey 的字符串类型的附加参数:

      [System.Web.Services.WebMethod] [System.Web.Script.Services.ScriptMethod] 公共字符串[] GetCompletionList( string prefixText, int count, string contextKey) { ... }

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

      编辑:不管它是否是新的,或者我是否完全忽略了它。它有效,我很高兴。我花了大约 10 分钟从困惑到找出自己的答案。

      【讨论】:

        【解决方案4】:

        如果您愿意,可以使用带有前缀文本的分隔符。所以,你可以传递“1:bcd”,在服务端你可以拆分这两个项目:

        string[] arguments = prefixText.Split(':'); 
        int id = Int32.Parse(arguments[0]);
        string text = arguments[1]; 
        

        【讨论】:

        • 如何控制将哪些前缀文本发送到方法?
        • 哦,我明白了!是的,你是对的。控件立即专注于 ServiceMethod,而不会在两者之间停下来。稍后我需要检查一下!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-13
        • 1970-01-01
        • 2015-09-03
        • 1970-01-01
        相关资源
        最近更新 更多