我已成功实现了一个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");
}
任何帮助将不胜感激。谢谢!
答案 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());
}