2017-09-14 1 views
0

저는 바코드 스캐너에서 입력을 받아들이는 웹 응용 프로그램을 개발해 왔습니다. 스캔 한 바코드 (GS1-128)를 클라이언트 측에서 서버 측으로 전달해야합니다. 표준으로 GS1-128에는 하나 또는 여러 개의 그룹 구분 기호 <GS> 자 (ASCII 코드 29 자)가 포함될 수 있습니다. 따라서 "123 <GS> 45", "12 <GS> 345"는 다른 입력입니다. 입력란을 가져 오는 입력란과 제출 버튼이 있습니다. 어떤 이유로 ASP.NET은 포스트 백에서 인쇄 할 수없는 문자를 포함하지 않으며 두 경우 모두 "12345"를 대신받습니다.ASP.NET 서버 측에서 web.form의 인쇄 할 수없는 바코드 문자를 전달합니다.

이 문제를 해결할 방법이 있습니까?

P. 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> 기호는 17 및 229의 키 코드 값을 갖는 두 키 입력 CTRL +]로 전송됩니다.

인쇄 할 수있는 표현이 없기 때문에 입력에 사용한 텍스트 상자에서이를 무시했습니다.

결국 나는이 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); 

모든 지금까지 작동합니다. 문제를 해결할 더 좋은 방법이 있는지 궁금합니다.

관련 문제