编辑&使用ViewModel删除对象

时间:2014-05-13 17:04:06

标签: asp.net-mvc asp.net-mvc-4 asp.net-mvc-viewmodel

我已成功实现了一个viewmodel,因此我可以使用两个表从我的数据库创建和返回项目。我的问题是编辑和删除单个项目。

当我只使用一张桌子时,我能够编辑/删除,但有两张,我遇到了障碍。

我的视图现在使用了一个viewmodel。在将id和TransactionViewModel Viewmodel传递给我的Edit方法参数时,我无法弄清楚如何传递特定的对象id。

这是我以前的编辑和编辑帖子。

public ActionResult Edit(int id = 0)
    {
        Transactions transactions = _db.Transactions.Find(id);
        if (transactions == null)
        {
            return HttpNotFound();
        }
        return View(transactions);
    }

[HttpPost]
    //[ValidateAntiForgeryToken]
    public ActionResult Edit(TransactionViewModel viewModel)
    {
        var transactionType = viewModel.Transaction.TransactionType;

        if (ModelState.IsValid)
        {
            //If the transaction category is an Expense, set it to a negative so we can calculate later.
            if (transactionType == Classes.Constants.Expense || (transactionType == Classes.Constants.Payment && viewModel.Transaction.Amount < 0))
            {
                viewModel.Transaction.Amount *= -1;
            }

            var transaction = new Transactions()
            {
                ClientId = viewModel.Transaction.ClientId,
                Amount = viewModel.Transaction.Amount,
                Date = viewModel.Transaction.Date,
                Category = viewModel.Transaction.Category,
                Description = viewModel.Transaction.Description,
                TransactionType = viewModel.Transaction.TransactionType
            };


            _db.Entry(transaction).State = EntityState.Modified;
            _db.SaveChanges();
            return RedirectToAction("Index");
        }
        return View(viewModel);
    }

我已经尝试了这个以获取编辑,但它每次返回相同的内容而不是我视图中指定的内容。防爆。如果单击客户端D的编辑,它将拉出客户端A的编辑屏幕,我无法保存。我使用@ Html.ActionLink()在每个事务旁边的可查看表中有一个编辑和删除按钮。

 public ActionResult Edit(TransactionViewModel viewModel)
    {
        if (ModelState.IsValid)
        {
            var transactions = from t in _db.Transactions
                               join c in _db.Clients
                                   on t.ClientId equals c.ClientId
                               select new TransactionViewModel() { Clients = c, Transaction = t };

            return View(transactions.FirstOrDefault());
        }
        return RedirectToAction("Index");
    }

任何帮助将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:0)

我打赌这个观点正在被缓存。有许多不同的方法可以影响控制器中的缓存。如果您只想删除缓存,在您编辑的情况下,请使用以下内容装饰该操作:

[OutputCache(NoStore = true, Duration = 0)]
public ActionResult Edit(TransactionViewModel viewModel)

[OutputCache(NoStore = true, Duration = 0)]
public ActionResult Edit(int id = 0)

注意:您必须清除缓存以获取上面没有设置缓存的新视图。

答案 1 :(得分:0)

你的Get Edit方法仍然应该接受一个int ID来从数据库中选择正确的记录,它应该返回视图模型。

类似的东西:

public ActionResult Edit(int id = 0)
{

    var transactions = from t in _db.Transactions
                               join c in _db.Clients
                                   on t.ClientId equals c.ClientId
                   where t.id == id
                               select new TransactionViewModel() { Clients = c, Transaction = t };

    return View(transactions.FirstOrDefault());
}