ASP.NETのAutoCompleteExtender追加情報
-
06-07-2019 - |
質問
アイテムのコレクションを返すサービスメソッドに追加情報を渡すにはどうすればよいですか?フォームに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") %>'
/>
だから、それは間違いなく間違った方法です...正しい方法は何ですか?
解決
azamには正しい考えがありますが、オートコンプリートメソッドのシグネチャには3番目のパラメーターを含めることもできます:
public string [] yourmethod(string prefixText、int count、string contextKey )
Azamのメソッドを使用してcontextKey文字列の結果を分割できますが、この方法では、.Split()の区切り文字(:)のユーザー入力をサナタイズすることを心配する必要はありません
他のヒント
聖なる煙、私はこれが私が必要とするものだと思う、私はこれをプログラミングし始める前にこのオプションを見たことがないと誓う。これはautocompleteextenderの新しいプロパティですか?
ContextKey-ServiceMethod / ServicePathで記述されるWebメソッドのオプションのオーバーロードに提供されるユーザー/ページ固有のコンテキスト。コンテキストキーを使用する場合、string型のcontextKeyという名前の追加パラメーターを使用して、同じ署名を持つ必要があります。
[System.Web.Services.WebMethod] [System.Web.Script.Services.ScriptMethod] public string [] GetCompletionList( string prefixText、int count、string contextKey){...}
&quot; GetCompletionList&quot;を置き換えることができます。任意の名前を使用しますが、戻り値の型とパラメーターの名前と型は大文字と小文字を含めて完全に一致する必要があります。
編集:新規かどうか、または単に見落としているかどうかは関係ありません。それは機能し、私は幸せです。混乱してから自分の答えを理解するまでに約10分かかりました。
必要に応じて、prefixTextでセパレータを使用できます。したがって、「1:bcd」を渡すことができます;サービス終了時には、2つのアイテムを分割できます:
string[] arguments = prefixText.Split(':');
int id = Int32.Parse(arguments[0]);
string text = arguments[1];