Telerik MVC网格批量编辑

时间:2011-09-16 16:28:41

标签: c# asp.net-mvc asp.net-mvc-3 razor telerik-grid

单击“保存”后,为什么我的更改不会持久保存到db。

产品存储库:

public class ProductRepository
{
    NorthwindDataContext context = new NorthwindDataContext();

    public IList<EditableProduct> All()
    {
        return (from product in context.Products
                select new EditableProduct { 
                    ProductID = product.ProductID,
                    ProductName = product.ProductName,
                    UnitPrice = product.UnitPrice.HasValue ? product.UnitPrice.Value : default(decimal),
                    UnitsInStock = product.UnitsInStock.HasValue ? product.UnitsInStock.Value : default(int),
                    Discontinued = product.Discontinued,
                    LastSupply = DateTime.Today
                }).ToList();
    }

    public EditableProduct One(Func<EditableProduct, bool> predicate)
    {
        return All().Where(predicate).FirstOrDefault();
    }

    public void Update(EditableProduct product)
    {
        EditableProduct target = One(p => p.ProductID == product.ProductID);

        if (target != null)
        {
            target.ProductName = product.ProductName;
            target.UnitPrice = product.UnitPrice;
            target.UnitsInStock = product.UnitsInStock;
            target.Discontinued = product.Discontinued;
            target.LastSupply = product.LastSupply;
        }
    }

    public void Insert(EditableProduct product)
    {
        product.ProductID = All().OrderByDescending(p => p.ProductID).First().ProductID + 1;
        All().Insert(0, product);
    }

    public void Delete(EditableProduct product)
    {
        EditableProduct target = One(p => p.ProductID == product.ProductID);
        if (target != null)
        {
            All().Remove(target);
        }
    }
}

控制器:

public partial class GridController : Controller
{
    ProductRepository productRepository = new ProductRepository();

    public ActionResult EditingBatch()
    {
        return View();
    }

    [HttpPost]
    [GridAction]
    public ActionResult _SelectBatchEditing()
    {
        return View(new GridModel(productRepository.All()));
    }

    [HttpPost]
    [GridAction]
    public ActionResult _SaveBatchEditing([Bind(Prefix = "inserted")]IEnumerable<EditableProduct> insertProducts,
        [Bind(Prefix = "updated")]IEnumerable<EditableProduct> updatedProducts,
        [Bind(Prefix = "deleted")]IEnumerable<EditableProduct> deletedProducts)
    {
        if (insertProducts != null)
        {
            foreach (var product in insertProducts)
            {
                productRepository.Insert(product);
            }
        }
        if (updatedProducts != null)
        {
            foreach (var product in updatedProducts)
            {
                var target = productRepository.One(p => p.ProductID == product.ProductID);
                if (target != null)
                {
                    target.ProductName = product.ProductName;
                    target.UnitPrice = product.UnitPrice;
                    target.UnitsInStock = product.UnitsInStock;
                    target.LastSupply = product.LastSupply;
                    target.Discontinued = product.Discontinued;

                    productRepository.Update(target);
                }
            }
        }
        if (deletedProducts != null)
        {
            foreach (var product in deletedProducts)
            {
                productRepository.Delete(product);
            }
        }
        return View(new GridModel(productRepository.All()));
    }
}

1 个答案:

答案 0 :(得分:0)

您似乎正在使用我们的示例应用程序中的代码,该代码确实不会更新数据库。它只是更新内存中的数据,因此浏览演示的每个用户只能看到他的更改。

要使其工作,您需要更新数据库。实际实现取决于您用于数据访问的框架。例如,对于Linq To SQL,您应该使用SubmitChanges方法。您可以检查更新基础数据库的this代码库项目。