我一直在尝试合并将在列表中显示的复选框 - 目标是能够选择多个复选框(或全选)并删除这些行。它需要一点点搜索,但我找到了一个很好的方法,但是我遇到了查询问题。
这是我的ViewModel
public class RecipeWrapper
{
public List<RecipeSelect> recipes { get; set; }
public RecipeWrapper()
{
this.recipes = new List<RecipeSelect>();
}
public IEnumerable<int> getSelection()
{
List<int> ids = new List<int>();
foreach (var n in recipes)
{
if (n.selection == true)
{
ids.Add(n.Recipe_ID);
}
}
return ids;
}
}
这是ViewModel RecipeSelect(在ViewModel上面实例化为List)
public class RecipeSelect
{
public bool selection { get; set; }
public int Recipe_ID { get; set; }
public string Name { get; set; }
public string Difficulty { get; set; }
public string Meal { get; set; }
public Nullable<int> Cook_Time { get; set; }
public string Directions { get; set; }
}
这是执行删除的控制器方法:
[HttpPost]
public ActionResult DeleteChecked(RecipeWrapper wrap)
{
var selectedIDs = wrap.getSelection();
**var selectedRecipes = from m in db.Recipes
where selectedIDs.Contains(m.Recipe_ID)
select m;**
foreach (var n in selectedRecipes)
{
db.Recipes.Remove(n);
}
db.SaveChanges();
return RedirectToAction("Index");
}
我调试了程序并确定我的EditorTemplate正确并且数据正确传递给控制器。但是,包含查询的粗体文本不会返回任何结果。如果我取出where子句,它将返回所有结果,后续代码将删除所有行。这让我觉得我的查询有问题。任何建议将不胜感激。
*编辑:我应该归功于它应该到位 - this link提供了一个很好的解释,即在MVC列表中加入复选框。强烈推荐,因为我努力寻找一个好方法几天。