一维/二维条码需要使用无线条码扫描仪捕获并传输到 Windows PC。我查看了摩托罗拉 MC2180 移动数据终端的规格。它似乎具有 Windows CE 6,带有基于 RhoElements Webkit 的浏览器和 Datawedge 应用程序,可将扫描的条形码传输到键盘缓冲区。
下面是使用 ASP.NET MVC4 扫描应用程序原型。
这种方法存在以下问题:
扫描条码后,用户必须手动按 Tab 键移动到下一个字段。是否有一些可以使用的条形码 APIS?我还没有找到 MC2180 的任何文档。
下面的视图看起来很难看:它允许扫描固定数字代码,但用户可能需要输入 1 .. 200 个代码来单个订单。如何更改它以使代码数量不固定?jQuery Mobile 应该用来改进这种方式还是其他方式?
控制器手动解析 http POST 缓冲区。这可以使用 ASP.NET MVC4 功能改进吗?
以无线方式扫描条形码并将其传输到 PC 的最佳方法是使用免费或随扫描仪 shoftware 提供的?应该使用哪种设备?如果有比 MC2180 更便宜的设备,它可以使用。
看法:
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1" />
</head>
<body>
<form method='post' action='SaveOrder'>
Number <input name='orderno' type='text'/>
Date <input name='orderdate' type='date'/>
<input type="hidden" name="_rowdelimiter" />
Product1 <input name='orderno' type='text'/>
Quantity1 <input name='quantity' type='text'/>
<input type="hidden" name="_rowdelimiter" />
Product2 <input name='orderno' type='text'/>
Quantity2 <input name='quantity' type='text'/>
<input type="hidden" name="_rowdelimiter" />
Product3 <input name='orderno' type='text'/>
Quantity3 <input name='quantity' type='text'/>
...
<input type='submit' value='Save order'/>
</form>
</body></html>
控制器:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult SaveOrder() {
var form = ControllerContext.HttpContext.Request.Form;
var orderDetails = new List<OrderDetails>();
var order = new Order();
OrderDetails row = null;
bool inheader = true;
foreach (var key in form.AllKeys)
{
if (key == "_rowdelimiter")
{
if (row != null)
orderDetails.Add(row);
row = new OrderDetails();
inheader = false;
continue;
}
if (inheader)
{
SetValue( order, key, HttpUtility.HtmlDecode(form[key]) );
continue;
}
SetValue( row, key, HttpUtility.HtmlDecode(form[key]) );
}
orderDetails.Add(row);
EntityManager.SaveOrder( order, orderDetails );
return ContentResult() {Content="Order saved" } ;
}
static void SetValue( object entity, string propertyName, string propertyValue ) {
PropertyInfo p = entity.GetType().GetProperty(propertyName);
p.SetValue(this, propertyValue, null);
}