2

AutoComplete 属性について学習した後 -ContextKey

私はそれを利点として使用しています:

すべてのエクステンダー オブジェクトのデータ ソースは、同じ WebMethod によって処理されます。

それ自体が、私にとっての成果です。

すべてがほぼ完璧になった今、問題は次のとおりです。

stage = table was selected の直後に、AutoComplete-Datasource のリクエストが 2 番目のテキストボックスによって送信されるときに、別のパラメーターを渡す必要があります。

ハードコードされた/定数だけでなく、選択したテーブルの値も必要です。

#TBX_TableSelectorFirstStageこれは、ハードコードされた値とともに、実際には のContextKey値です...

(のようなものContextKey += value of TBX_TableSelectorFirstStage

そのため、要求されたテーブル(テーブルの名前)で指定された列リストを描画できます

これはJqueryコードです

<script type="text/javascript">
   $('document').ready(function () {

       var IvalidValue_Msg = "table was not selected";
       var TBX_tables = $(this);

       var TBX_Columns = $('#TBX_ColumnsSelectorFirstStage');


       $('#TBX_TableSelectorFirstStage')
       .val("Choose a Table")
       .focus(function () {

           $(this).val("");
           $(this).attr("dir", "ltr");

       }).blur(function () {
           var TBXTablsVALUE = $('#TBX_TableSelectorFirstStage').val();
           var Lngth = $('#TBX_TableSelectorFirstStage').val().length;
           var InvalidTBXBlur_TablesValue = TBXTablsVALUE == "" || TBXTablsVALUE == " " || Lngth < 4;
           if (InvalidTBXBlur_TablesValue) {
               $(this).focus();
               $(this).val(IvalidValue_Msg);
           }
           else {

               $(TBX_Columns).focus();
               SetContextKeyValue();
           }
           //$(this).next(':input').focus();

       }).change(function () {
           var TBXTablsVALUE = $('#TBX_TableSelectorFirstStage').val();
           var Lngth = $('#TBX_TableSelectorFirstStage').val().length;
           var InvalidTBXBlur_TablesValue = TBXTablsVALUE == "" || TBXTablsVALUE == " " || Lngth < 4;

           if (InvalidTableValue) {
               $(this).val(IvalidValue_Msg);
           }
           else {
               SetContextKeyValue();
           }
       }).click(function () {


               $(this).val("");

       });
   });
        /// ==========================================================\\\
       ///Jquery Section That Is Suppose To manipulate contextKey Property.

       function SetContextKeyValue() {
     //  var ttt = $get('AjaxAcEx_Columns_FirstStage',
       alert("asasas");
       // var x = $('#AutoCompleteExtender3'); //.set_contextKey($get('AjaxAcEx_Tables_FirstStage').value);
       alert($('#AjaxAcEx_Columns_FirstStage').attr("id")); 
   }

これはASPX コードです

<form id="form1" runat="server">
<cc1:ToolkitScriptManager ID="ToolKitScrptMan1" runat="server"></cc1:ToolkitScriptManager>

<cc1:AutoCompleteExtender ID="AutoCompleteExtender1" TargetControlID="TBX_FntsAC" runat="server"
                         MinimumPrefixLength="1" EnableCaching="true" CompletionSetCount="1" CompletionInterval="100" 
                         ServiceMethod="MyAcReqHandler" ContextKey="acFontsRquest"
                         FirstRowSelected="true" CompletionListCssClass="CL_Css_DataBase" CompletionListItemCssClass="CL_ItemCss_DataBase" CompletionListHighlightedItemCssClass="CL_tHighlightedItemCss_DataBase">
</cc1:AutoCompleteExtender>
<cc1:AutoCompleteExtender ID="AutoCompleteExtender2" BehaviorID="AjaxAcEx_Tables_FirstStage" TargetControlID="TBX_TableSelectorFirstStage" runat="server"
                         MinimumPrefixLength="1" EnableCaching="true" CompletionSetCount="1" CompletionInterval="100"
                         ServiceMethod="MyAcReqHandler" ContextKey="acTablesSelector_FirstStage"
                         FirstRowSelected="true" CompletionListCssClass="CL_Css_DataBase" CompletionListItemCssClass="CL_ItemCss_DataBase" CompletionListHighlightedItemCssClass="CL_tHighlightedItemCss_DataBase">
</cc1:AutoCompleteExtender>


<%--  Here is where i am stuck .
     object /element -  AutoCompleteExtender3 / BehaviorID AjaxAcEx_Columns_FirstStage
    This is the object i need to Set it's ContextKey attribute-value,
     with the result value of #TBX_TableSelectorFirstStage
--%>

<cc1:AutoCompleteExtender ID="AutoCompleteExtender3" BehaviorID="AjaxAcEx_Columns_FirstStage" TargetControlID="TBX_ColumnsSelectorFirstSTage" runat="server"
                         MinimumPrefixLength="1" EnableCaching="true" CompletionSetCount="1" CompletionInterval="100"
                         ServiceMethod="MyAcReqHandler" ContextKey="acColumnsSelector_FirstStage"
                         FirstRowSelected="true" CompletionListCssClass="CL_Css_DataBase" CompletionListItemCssClass="CL_ItemCss_DataBase" CompletionListHighlightedItemCssClass="CL_tHighlightedItemCss_DataBase">
</cc1:AutoCompleteExtender>


<div id="Div_firstStage" runat="server" style="width:90%" dir="rtl">
    <asp:TextBox ID="TBX_TableSelectorFirstStage"  runat="server" />
    <asp:TextBox ID="TBX_ColumnsSelectorFirstStage" runat="server" />   

</div>

* .Cs コード ビハインド* (webMethod)

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

public static List<string> MyAcReqHandler(string prefixText, string contextKey)
{

    List<string> retListAC = new List<string>();
    switch (contextKey)
    {

        case AutoComplete.Param.acTablesSelector_FirstStage:
            retListAC = GetListForAutoComplete<HTDB_Tables>(App.VarNms.SesDbTablsList);
            break;
        case AutoComplete.Param.acColumnsSelector_FirstStage:
            retListAC = GetListForAutoComplete<HTDB_Cols>(App.VarNms.SesDbTablsList);
            break;
        case AutoComplete.Param.acFontsRquest_SecondStage:
            retListAC = GetListForAutoComplete<fntNams>(App.VarNms.SesFontsList);
            break;

    }

    return AutoComplete.FromListStr(prefixText, retListAC);
}



private static List<string> GetListForAutoComplete<TheClassNameHere>(string SessionVarName, string NestedClassName="")
{
    List<string> ReturnedList = new List<string>();
    if (CurrSesVarSet.SesVar_AcDsListStr.Count == 0)
    {
        bool isNested = typeof(TheClassNameHere).IsNested;
        switch (isNested)
        {
            case true:
                ReturnedList = RflectMeths.anyNestedClassFldsAsListByType<TheClassNameHere>(NestedClassName);
                break;
            default:
                ReturnedList = RflectMeths.anyClassFldsAsListByType<TheClassNameHere>();
                break;
        }



        CurrSesVarSet.SesVar_AcDsListStr = ReturnedList;
        CurrentSession.AddVar(SessionVarName, ReturnedList);
    }
    else
        if (CurSessionMesthods.VarExistStat(App.VarNms.SesFontsList))
             ReturnedList = CurSessionMesthods.GetSessionVar.AsListStr(SessionVarName);
        else ReturnedList = CurrSesVarSet.SesVar_AcDsListStr;
    return ReturnedList;
}

このアプリケーションでの取り組みの 1 つは完全なポスト バックを回避ContextKeyすることだったので、実装したいと思いますJquery。フル ページ ポスト バックなので、ページをリロードせずに完了した場合は、このパラメーターを送信できる限り気にする必要はありません。

ご協力いただきありがとうございます。これを解決していただければ幸いです。

4

1 に答える 1

0

この実装に関する情報が見つからなかったので、私はこの答えをたくさん検索しました。もっと頑張らなければならなかったと思います。誰かが私にスポーツについて何か言ったことを覚えているので、このコンテストに勝つ必要があります。できるだけ速く、それから加速するので、見つけるのが難しいように見えたので、もう少し作業しました。

だから私が欠けていたものと、Jqueryの経験がほとんどないため

インターネットで見つけた 1 つのことは、ContextKey を設定するために使用できる関数です。そのため、ヘルプ (私のシナリオに正確に適合する既製のコード例) を取得しようとするのに忙しすぎて、最終的に試行錯誤を繰り返しました。セットがあればと思います。get ( が必要です。

これは、既存のキーを操作して、必要なものと連結する方法です

   $('document').ready(function () {
       var IvalidValue_Msg = "table was not selected";
       var TBX_tables = $(this);
       var TstTBXCLS = $(this).next();
       var TBX_Columns = $('#TBX_ColumnsSelectorFirstStage');


       $('#TBX_TableSelectorFirstStage')
       .val("Choose a Table")
       .focus(function () {

           $(this).val("");
           $(this).attr("dir", "ltr");

       }).blur(function () {
           var TBXTablsVALUE = $('#TBX_TableSelectorFirstStage').val();
           var Lngth = $('#TBX_TableSelectorFirstStage').val().length;
           var InvalidTBXBlur_TablesValue = TBXTBLSVALUE == "" || TBXTBLSVALUE == " " || Lngth < 4;
           if (InvalidTBXBlur_TablesValue) {
               $(this).focus();
               $(this).val(IvalidValue_Msg);
           }
           else {

               $(TBX_Columns).focus();
               SetContextKeyValue();
           }
           //$(this).next(':input').focus();

       }).change(function () {
           var TBXTablsVALUE = $('#TBX_TableSelectorFirstStage').val();
           var Lngth = $('#TBX_TableSelectorFirstStage').val().length;
           var InvalidTBXBlur_TablesValue = TBXTBLSVALUE == "" || TBXTBLSVALUE == " " || Lngth < 4;

           if (InvalidTableValue) {
               $(this).val(IvalidValue_Msg);
           }
           else {
               SetContextKeyValue(TBXTBLSVALUE );
           }
       }).click(function () {


               $(this).val("");

       });
   });

       function SetContextKeyValue(selectedTableName) {

           var CurrentConextKey = $find('AjaxAcEx_Columns_FirstStage').get_contextKey();
           var JointParams = CurrentConextKey + "_" + selectedTableName;
           $find('AjaxAcEx_Columns_FirstStage').set_contextKey(JointParams);
           alert(JointParams);

   }

次に、C# コード ビハインドで を使用string.Split('_')して、両方を取得し、それぞれを ac# 変数に入れます。例を見つけるのは簡単ではないので、これが同じユースケースを持つ他の人に役立つことを願っています。

于 2012-12-19T10:23:28.803 に答える