2010-01-15 51 views
0

我们使用asp.net mvc并且在选择批准订单列表时遇到麻烦。ASP.net MVC只获取选定的行(复选框)

通过选择每个订单的复选框来批准订单。

如..

订单ID产品被批准 1本书(取决于如果用户选择复选框或不) 2笔(取决于如果用户选择复选框或不)

所以目前我们做这样的事情:想知道是否有implementating

查看一个更好的办法:

我们的假(被微软视为产生)

对邮政控制器的操作方法:通过订单 我们循环(这是Order对象的列表)响应 (订单ID)=真,假的:那么我们选择的顺序,或者我们不选择

但是你看我们要避免在控制器中写入那个逻辑。

有没有想法?

回答

1

最近,我回答了类似的问题:

ASP.NET MVC Checkbox Group

你可以那样做(这将是propable 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; } %> 

你的POST方法将:

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


} 
0

你可以通过添加/从一个单一的隐藏输入删除订单ID作为用户蜱/ unticks做在客户端脚本。根据需要使用数组push/splice,并使用join存储在隐藏字段中。
然后控制器只需读取一个响应值即可获得(逗号分隔?)选定订单ID列表。