1

このテキストボックスとAutocompleteExtenderがあります

<asp:TextBox ID="txtItemName" runat="server" ClientIDMode="Static"
MaxLength="300" onfocus="javascript:select();"
></asp:TextBox>
<cc1:AutoCompleteExtender runat="server" ID="autoComplete1" TargetControlID="txtItemName" EnableCaching="true"
ServicePath="~/AutoComplete.asmx" ServiceMethod="GetCompletionList" MinimumPrefixLength="1" 
CompletionInterval="10" CompletionSetCount="15" FirstRowSelected="True" CompletionListCssClass="AutoExtender"
CompletionListItemCssClass="AutoExtenderList" CompletionListHighlightedItemCssClass="AutoExtenderHighlight"
>
</cc1:AutoCompleteExtender>

そして、メソッドは次のように定義されます

[WebMethod]
public string[] GetCompletionList(string prefixText, int count, string contextKey)
{
List<string> items = new List<string>(count);
SqlCommand con = new SqlCommand();
SqlDataReader sdr = null;
DataSet ds = new DataSet();
try
{
    SqlCommand cmd = new SqlCommand();

    cmd.CommandText = "proc_NewBooking";
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.AddWithValue("@BranchId", Globals.BranchID);
    cmd.Parameters.AddWithValue("@ItemName", prefixText.ToString());
    cmd.Parameters.AddWithValue("@Flag", 11);
    sdr = AppClass.ExecuteReader(cmd);
    ds = AppClass.GetData(cmd);
    while (sdr.Read())
    {
        items.Add("" + sdr.GetValue(0));
    }
    sdr.Close();
    sdr.Dispose();
}
catch (Exception ex)
{
          // Log the message and continue  
}
return items.ToArray();
}

私が欲しいのはカスタム値を渡すことです、ドキュメントcontextKeyは私達がプロパティを使ってこれをすることができると言います

そこで、この行をに追加しましたAutocompleteExtender

<cc1:AutoCompleteExtender runat="server" ID="autoComplete1" TargetControlID="txtItemName" EnableCaching="true"
ServicePath="~/AutoComplete.asmx" ServiceMethod="GetCompletionList" MinimumPrefixLength="1" 
ContextKey="javascript:document.getElementById('drpCustomerType').value"
CompletionInterval="10" CompletionSetCount="15" FirstRowSelected="True" CompletionListCssClass="AutoExtender"
CompletionListItemCssClass="AutoExtenderList" CompletionListHighlightedItemCssClass="AutoExtenderHighlight"
>
</cc1:AutoCompleteExtender>

次のようにこれを受け入れるためにメソッドをオーバーロードしました。

 public string[] GetCompletionList(string prefixText, int count, string contextKey)
 {
      // custom code based on context key
 }

しかし、デバッガーがヒットすると、drpCustomerType代わりにの値が取得されません。ハードコードされた文字列 "javascript:document.getElementById('drpCustomerType')。value"が取得されますか?

drpCustomerType誰かがこのメソッドに値を渡して、それに基づいてアイテムリストを表示できるようにする方法を教えてもらえますか?

4

2 に答える 2

6

OnClientPopulatingJavaScriptでイベントを処理contextKeyし、ハンドラーでプロパティ値を設定する必要があります。

function autoComplete1_OnClientPopulating(sender, args) {
    sender.set_contextKey(document.getElementById('drpCustomerType').value);
}


<cc1:AutoCompleteExtender runat="server" ID="autoComplete1" TargetControlID="txtItemName" EnableCaching="true"
ServicePath="~/AutoComplete.asmx" ServiceMethod="GetCompletionList" MinimumPrefixLength="1" 
UseContextKey="true"
CompletionInterval="10" CompletionSetCount="15" FirstRowSelected="True" CompletionListCssClass="AutoExtender"
CompletionListItemCssClass="AutoExtenderList" 
OnClientPopulating="autoComplete1_OnClientPopulating"
CompletionListHighlightedItemCssClass="AutoExtenderHighlight" />
于 2013-03-12T10:57:11.687 に答える
0
 You can do it using Hidden Field, In Code Behind you didnot pass ContextKey anywhere
 Find the session and store it in hidden field at page load that will be your drpCustomerType 



   Do like this in WebMethod 

   [System.Web.Services.WebMethod (EnableSession=true)]

      contextkey= Convert.ToInt32(HttpContext.Current.Session["drpCustomerType "].ToString());
        cmd.Parameters.AddWithValue("@drp ", contextkey);

     @drp = Variable Declare in SP 
于 2014-10-18T11:07:00.660 に答える