ASP.net MVC只获取选定的行(复选框)

时间:2010-01-15 21:08:16

标签: asp.net-mvc model-view-controller

我们正在使用asp.net mvc并且无法选择已批准的订单列表。

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

例如..

订单ID产品已获批准 1本书(取决于用户是否选中复选框) 2笔(取决于用户是否选中复选框)

所以目前我们正在做这样的事情:并想知道是否有更好的实施方式

查看:

我们的错误(由微软生成)

on Post in Controller动作方法: 我们遍历Orders(这是Order对象的列表) 作为回应(订单ID)=真,假:然后我们选择该订单,否则我们不选择

但你知道我们想避免在控制器中写这个逻辑。

所以有什么想法吗?

3 个答案:

答案 0 :(得分:1)

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

ASP.NET MVC Checkbox Group

你可以这样做(它可以支持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的列表。