开发MVC 5应用程序。
查看:我有一个可编辑的表格。我只想更新已更改的行。另外,我只想更新2个字段,而不是所有字段。
这里是viewmodel ....
namespace SurveyingApp.ViewModels
{
[NotMapped]
public class SurveyResultsViewModel
{
// ------ hidden
public int EventId { get; set; }
[Display(Name = "Question")]
public string SurveyQuestionText { get; set; }
[Key]
public int Id { get; set; } // SurveyResults.Id
[Display(Name = "Answer")]
public string SelectedSurveyAnswer { get; set; }
public string Comments { get; set; }
}
}
这是更新/发布代码...
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Index(
[Bind(Include = "Id,SelectedSurveyAnswer,Comments")]
List<SurveyResultsViewModel> mySurveyResult)
{
if (ModelState.IsValid)
{
for (int i = 0; i < mySurveyResult.Count() - 1; i++)
{
SurveyResult surveyResult = new SurveyResult();
//Attach the instance so that we don't need to load it from the DB
db.SurveyResults.Attach(surveyResult);
//Set the Id for my model.
surveyResult.Id = mySurveyResult[i].Id;
//update field from the VM
surveyResult.SurveyAnswer = mySurveyResult[i].SelectedSurveyAnswer;
surveyResult.Comments = mySurveyResult[i].Comments;
//Specify fields that should be updated.
db.Entry(surveyResult).Property(x => x.SurveyAnswer).IsModified = true;
db.Entry(surveyResult).Property(x => x.Comments).IsModified = true;
db.SaveChanges();
return RedirectToAction("Index");
}
db.SaveChanges();
return RedirectToAction("Index");
}
return View();
}
直到第一个.IsModified语句(对于SurveyAnswer字段)才有效。错误是......
该物业&#39; Id&#39;是对象的关键信息的一部分,不能修改。
我没有尝试更新Id字段。知道为什么会这样,或者我怎么能让它正常工作?
答案 0 :(得分:2)
我认为这可能是您在附加对象后为Id属性赋值的结果。在附加之前分配Id可能会产生更好的结果,但我没有对此进行测试。
无论如何,我会推荐一种不同的方法。如果我是你,我会做以下事情:
我不知道你有多少记录。出于性能原因这样做可能是不可行的,但如果性能不是问题,我会建议这样做。