我一直在开发一个接受条形码扫描仪输入的Web应用程序。我需要将扫描的条形码(GS1-128)从客户端转到服务器端。按标准,GS1-128可能包含一个或几个组分离器ut< gs>字符(带有ASCII代码29的字符)。因此," 123< gs> 45"," 12< gs> 345"是不同的输入。我有一个文本框和一个提交按钮来获取输入。由于某种原因,ASP.NET不包含寄回中的不可打印字符,在这两种情况下,我都会收到" 12345"。
有什么方法可以克服这个问题?
P.S。当我使用winform(用于测试)时,一切都还好,我会得到角色,但是使用ASP.NET,这不起作用。
在挖掘后,我发现大多数条形码扫描仪实际上会传输一系列击键,就好像它们来自键盘一样。发生这种情况,< gs>符号以17和229相应的密钥编码值为两个击键ctrl ]。
。由于它没有可打印的表示,所以我用于输入的文本框只是忽略了它。
我最终发现的是放置在文本框上的键盘事件处理程序。它只是用'|'。
代替'^]' <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);
到目前为止,一切都起作用。我想知道是否有更好的方法来解决问题。