2008-10-09 74 views
2

如何将附加信息传递给返回项目集合的服务方法?我将试图解释我的意思,我在表单上有两个文本框,我需要根据数据库中的特定帐户ID填写姓名。所以,我需要传递一个整数给getNamesForDropDown方法。我想不出做什么,所以我做了错误的事情,以及所使用的CompletionSetCount实际上通过我所需要的信息:ASP.NET中的AutoCompleteExtender附加信息

[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文件,我设置了CompletionSetCount基于关闭用户当前正在该页面上查看的帐户ID。

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

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

回答

5

阿扎姆具有idea-但自动完成方法的签名还可以有第三个参数的正确:

公共字符串[] yourmethod(字符串prefixText,诠释计数,串contextKey

你可以拆分了contextKey字符串使用阿扎姆的方法 - 但这样的结果,你不必担心sanatizing用户的输入.Split的()的分隔符(:)

2

如果你喜欢,你可以使用带有prefixText的分隔符。所以,你可以通过“1:BCD”,并在服务端可以拆分的两个项目:

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

我该如何控制发送给该方法的前缀文本? – stephenbayer 2008-10-09 19:50:17

+0

哦,我明白了!你是对的。该控件立即关注ServiceMethod,而不会在两者之间停下来。我将需要稍后检查! – azamsharp 2008-10-09 19:54:22

3

圣烟,我想这是我需要的,我发誓我从来没有见过这个选项我开始之前编程这个。这是一个autocompleteextender的新属性吗?

Excerpt from Documentation

ContextKey - 提供给由ServiceMethod/ServicePath描述的Web方法的一个任选的过载的用户/页特定上下文。如果上下文键时,它应该有一个名为contextKey string类型的附加参数相同的签名:

[System.Web.Services.WebMethod] [System.Web.Script.Services.ScriptMethod] 公众请注意,您可以将“GetCompletionList”替换为您选择的名称,但返回类型和参数名称和类型必须完全相同匹配,包括案例。

编辑:如果它是新的或不是,或者我是否完全忽略它。它有效,我很高兴。我花了大约10分钟才弄清楚自己的答案。