【发布时间】:2013-05-08 04:11:20
【问题描述】:
我有控制器发布操作
public ActionResult Demographics(string submitButton, DemographicsViewModel model)
{
switch (submitButton)
{
case "Home":
return RedirectToAction("Index");
case "Next Page":
using (ProposalRepository proposalRepository = new ProposalRepository())
{
model.Proposal.UserID = proposalRepository.GetUserByName(MasterHelper.CurrentUsername).UserID;
model.Proposal.CustomerID = proposalRepository.GetCustomerByName(model.CustomerName).CustomerID;
if (model.Proposal.ProposalID != 0)
{
proposalRepository.Update(model.Proposal);
}
else
{
proposalRepository.AddProposal(model.Proposal);
}
proposalRepository.SaveChanges();
}
return RedirectToAction("GRQuestions", model.Proposal);
default:
return View();
}
}
当我尝试更新时
public void Update(Proposal proposal)
{
mContext.Proposals.ApplyCurrentValues(proposal);
}
抛出错误:在 ObjectStateManager 中找不到具有与所提供对象的键匹配的键的对象。验证所提供对象的键值是否与必须应用更改的对象的键值匹配。 我正在寻找解决方案,我发现了这个:
public ActionResult Demographics(string submitButton, DemographicsViewModel model)
{
switch (submitButton)
{
case "Home":
return RedirectToAction("Index");
case "Next Page":
using (ProposalRepository proposalRepository = new ProposalRepository())
{
Proposal proposal = proposalRepository.GetById(model.Proposal.ProposalID);
model.Proposal.UserID = proposalRepository.GetUserByName(MasterHelper.CurrentUsername).UserID;
model.Proposal.CustomerID = proposalRepository.GetCustomerByName(model.CustomerName).CustomerID;
if (model.Proposal.ProposalID != 0)
{
proposalRepository.Update(model.Proposal);
}
else
{
proposalRepository.AddProposal(model.Proposal);
}
proposalRepository.SaveChanges();
}
return RedirectToAction("GRQuestions", model.Proposal);
default:
return View();
}
}
只添加一行:
Proposal proposal = proposalRepository.GetById(model.Proposal.ProposalID);
效果很好,但我认为这是一个愚蠢的决定,我相信有更好的方法和解释???
【问题讨论】:
标签: asp.net-mvc entity-framework-4