2026年9月3日 星期四

V60202 – [儲存位置]- 依[庫房]欄位值,過濾[儲存位置] - url 特殊字元(#,?,&)處理 - encodeURIComponent - encode,decode - Uri.UnescapeDataString

目的:  V60202 – [儲存位置]- 依[庫房]欄位值,過濾[儲存位置]  - url 特殊字元(#,?,&)處理  -

處理說明: 1>url 若含有 # 送至後端會錯誤, 瀏覽器會把#當成url分隔符號,不會傳給伺服器
                       -->所以 '../get_SPPick?WH=17# , 送至後端,17# 變成 17 , #不會傳給後端
                       -->url(含中文字,Ex:庫房),瀏覽器會自動將中文字編成%xx,送至後端
                  2>*.js 參數編碼:  encodeURIComponent() 
                       --> 所有特殊字元(#,?,&,庫房),均會編碼(%xx)
                      var Tmp_url = "../api/V60202API/get_SPPick?WH=" 
                                           + encodeURIComponent(Tmp_WH);     
                  3>*.cs 後端[HttpPost]  
                      --> *.cs 參數會自動將 %xx 還原成原始字元(#,?,&,庫房)
                       [HttpPost]
                       //前端 WH: 17%23      --> 後端  WH: 17#
                        //前端 WH: 17%2523  --> 後端 WH: 17%23 
                                                              --> Uri.UnescapeDataString(17%23) -- 17#
                      public dynamic get_SPPick(string SP = "", string WH="" ,int isComplete = 0)
                     {                   


1>*.js
 Ext.getCmp('btn_SP').on("click", function () {
        var Tmp_WH = Ext.getCmp("WH").getValue();  //庫房可能含 17#
        //1>url='../get_SPPick?WH= 17#', 傳至後端,會 錯誤 ,   -->  url 需改成 17%23 傳至後端
        //17#  , encodeURIComponent(Tmp_WH)  --> 17%23
        var Tmp_url = "../api/V60202API/get_SPPick?WH=" + encodeURIComponent(Tmp_WH);                
        var win = EditPickx('儲存位置', Tmp_url, ['SP',], ['SP'], J_pickstore_SP, J_pickcolumns_SP);
        win.show();
    });

2>*.cs
[HttpPost]
        //前端 WH: 17%23      --> 後端  WH: 17#
        //前端 WH: 17%2523  --> 後端 WH: 17%23  ,前端以 %23編碼 --> 後端還原成 %23
        public dynamic get_SPPick(string SP = "", string WH="" ,int isComplete = 0)
        {
            
            string Tmp_Sql = " SELECT  DISTINCT SP , WH  "
                                       + "  FROM   AMM_COMP "
                                       + "  WHERE  1=1 "
                                       + "    AND      SP IS NOT NULL "
                                       + "    AND      STAT='A'   ";
            if (!myfunc.checkisnull(WH))
            {                
                Tmp_Sql = Tmp_Sql + " AND    WH=" + myfunc.AA(WH);
            }
                
            Tmp_Sql = Tmp_Sql + " ORDER  BY SP ";
            string n = funId + "s_SP";
            DataSet ds = setupPickDs(n, Tmp_Sql, new string[] { "AMM_COMP" });
            if (SP != null && !SP.Equals(""))
            {
                if (isComplete == 1)
                {
                    ds = getPickDsbyCondi(n, "SP='" + SP + "'");
                }
                else
                {
                    ds = getPickDsbyCondi(n, "SP  LIKE '%" + SP + "%'");
                }
            }
            return ds;
        }  // end of  get_SPPick

沒有留言:

張貼留言