2017-09-14 47 views
0

我一直在開發一個接受條形碼掃描器輸入的web應用程序。 我需要將掃描的條碼(GS1-128)從客戶端傳遞到服務器端。按照標準,GS1-128可能包含一個或幾個組分隔符<GS>字符(ASCII碼29的字符)。 因此,「123 <GS> 45」,「12 <GS> 345」是不同的輸入。 我有一個文本框和一個提交按鈕來獲取輸入。 由於某些原因,ASP.NET在回發中不包含非打印字符,並且在這兩種情況下我都會收到「12345」。ASP.NET將web.form中的非打印條碼字符傳遞給服務器端

有什麼辦法可以解決這個問題嗎?

P.S.當我使用WinForm(用於測試)時,一切正常,並且我得到了這個角色,但是使用ASP.NET這不起作用。

+0

看起來像瀏覽器限制而不是ASP.NET。看看https://stackoverflow.com/questions/10005451/scanning-a-barcode-with-an-ascii-control-character-into-an-input-field –

回答

0

經過一番挖掘,我發現大多數條形碼掃描儀實際上會傳輸一系列按鍵,就好像它們來自鍵盤。 當發生這種情況時,<GS>符號被作爲兩個鍵擊CTRL +]發送,其鍵值爲17和229。

由於它沒有可打印的表示,因此我用於輸入的文本框完全忽略了它。

我最終以爲這個keyDown事件處理程序放置在文本框中。它簡單地用'|'替代'^]'。

<script type="text/javascript"> 
     var ctrlReceived = false; 
     function handleStroke(event) { 
      if (ctrlReceived && 221 == event.keyCode) 
       document.getElementById('txtScanBoxBarcode').value += '|'; 
      ctrlReceived = (17 == event.keyCode); 
      return null; 
     }; 
    </script> 

在服務器端,我只是改回:

string barcode = this.txtScanBoxBarcode.Text.Replace('|', (char)29); 

一切工作至今。我想知道是否有更好的方法來處理這個問題。

相關問題