0

我一直在开发一个接受条形码扫描仪输入的网络应用程序。我需要将扫描的条形码(GS1-128)从客户端传递到服务器端。按照标准,GS1-128 可能包含一个或多个组分隔符 <GS> 字符(ASCII 代码为 29 的字符)。因此,“123<GS>45”、“12<GS>345”是不同的输入。我有一个文本框和一个提交按钮来获取输入。出于某种原因,ASP.NET 在回发中不包含不可打印的字符,并且在这两种情况下我都会收到“12345”。

有没有办法克服这个问题?

PS 当我使用 WinForm(用于测试)时,一切正常,我得到了角色,但是使用 ASP.NET,这不起作用。

4

1 回答 1

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);

到目前为止一切正常。我想知道是否有更好的方法来处理这个问题。

于 2017-09-14T10:06:28.207 回答