我们正在使用asp.net mvc并且无法选择已批准的订单列表。
通过选中每个订单的复选框来批准订单。
例如..
订单ID产品已获批准 1本书(取决于用户是否选中复选框) 2笔(取决于用户是否选中复选框)
所以目前我们正在做这样的事情:并想知道是否有更好的实施方式
查看:
我们的错误(由微软生成)
on Post in Controller动作方法: 我们遍历Orders(这是Order对象的列表) 作为回应(订单ID)=真,假:然后我们选择该订单,否则我们不选择
但你知道我们想避免在控制器中写这个逻辑。
所以有什么想法吗?
答案 0 :(得分:1)
最近我回答了类似的问题:
你可以这样做(它可以支持foreach循环):
<% int i = 0; foreach(Order o in Model.Orders) { %>
<%= Html.CheckBox("orders[" + i + "].Checked") %>
<%= Html.Hidden("orders[" + i "].ID",Order[i].ID) %>
<%= Html.Hidden("orders[" + i + "].Checked",false) %>
<% ++i; } %>
您的帖子方法将是:
[HttpPost]
public ActionResult Test(OrdersSelection[] orders)
{
var selectedOrders = orders.Where(o => o.Checked);
return View();
}
,模型将是
public class OrdersSelection
{
public bool Checked { get; set; }
public bool ID { get; set; }
}
答案 1 :(得分:0)
public virtual ActionResult MyAction(FormCollection fVals)
{
var q = from x in fVals.AllKeys
where fVals[x] != "false"
select x;
var ids = q.ToList();
// take id and call service with filter
var result = this.myService.FilterResultByID(ids);
// then return model
return View(result);
}
答案 2 :(得分:0)
您可以在客户端脚本中通过在用户勾选/取消勾选时从单个隐藏输入中附加/删除订单ID来执行此操作。根据需要使用数组push
/ splice
,并使用join
存储在隐藏字段中。
然后控制器只需要读取一个响应值以获得(逗号分隔的?)所选订单ID的列表。