public override object BindModel(System.Web.Mvc.ControllerContext controllerContext, System.Web.Mvc.ModelBindingContext bindingContext) { ProductReviewOperation currentOperation; if (controllerContext.HttpContext.Request.Form["Approve"] != null) { currentOperation = ProductReviewOperation.Approve; } else if (controllerContext.HttpContext.Request.Form["Reject"] != null) { currentOperation = ProductReviewOperation.Reject; } else if (controllerContext.HttpContext.Request.Form["Delete"] != null) { currentOperation = ProductReviewOperation.Delete; } else { return new ReviewUpdateModel(); } var nameValueCollection = controllerContext.HttpContext.Request.Form; var keys = nameValueCollection.AllKeys.Where(s => s.StartsWith("review-")); var reviewUpdateModel = new ReviewUpdateModel { CurrentOperation = currentOperation, Reviews = new List<ProductReview>() }; foreach (var key in keys) { var substring = key.Substring(7); int id; if (Int32.TryParse(substring, out id) && nameValueCollection[key].Contains("true")) { var review = Session.Get<ProductReview>(id); if (review != null) reviewUpdateModel.Reviews.Add(review); } } return reviewUpdateModel; }
public void BulkAction(ReviewUpdateModel model) { var currentOperation = model.CurrentOperation; switch (currentOperation) { case ProductReviewOperation.Approve: _session.Transact(session => { foreach (var item in model.Reviews) { item.Approved = true; Update(item); } }); break; case ProductReviewOperation.Reject: _session.Transact(session => { foreach (var item in model.Reviews) { item.Approved = false; Update(item); } }); break; case ProductReviewOperation.Delete: _session.Transact(session => { foreach (var item in model.Reviews) { Delete(item); } }); break; default: throw new ArgumentOutOfRangeException(); } }