嘗試保存編輯頁面時出現以下物體框架錯誤
"Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded."
這是我的 EDIT 控制器
[HttpPost]
public ActionResult Edit(RESULT results)
{
if (ModelState.IsValid)
{
_context.Entry(results).State = EntityState.Modified;
_context.SaveChanges();
return RedirectToAction("Details");
}
return View(results);
}
我需要更新多行(僅限結果列值)
我檢查了網站中的解決方案
我添加了主鍵 ID 列,見圖:

這是編輯視圖代碼:
<table class="table">
<tr>
<td>
@Html.DisplayNameFor(model => model.FirstOrDefault().ID)
</td>
<td>
@Html.DisplayNameFor(model => model.FirstOrDefault().custid)
</td>
<td>
@Html.DisplayNameFor(model => model.FirstOrDefault().TESTID)
</td>
<td>
@Html.DisplayNameFor(model => model.FirstOrDefault().LabTest.TestName)
</td>
<td>
@Html.DisplayNameFor(model => model.FirstOrDefault().RESULT1)
</td>
</tr>
@for (int i = 0; i < Model.Count; i )
{
<tr>
<td>
@Html.TextBox("RESULTS[" @i "].ID", Model[i].ID, new { @readonly = "readonly" })
</td>
<td>
@Html.TextBox("RESULTS[" @i "].custid", Model[i].custid, new { @readonly = "readonly" })
</td>
<td>
@Html.TextBox("RESULTS[" @i "].TESTID", Model[i].TESTID, new { @readonly = "readonly" })
</td>
<td>
@Html.TextBox("LabTest[" @i "].TestName", Model[i].LabTest.TestName, new { @readonly = "readonly" })
</td>
<td>
@Html.TextBox("RESULTS[" @i "].RESULT1", Model[i].RESULT1)
</td>
</tr>
}
</table>
<div class="form-group">
<div class="col-md-offset-2 col-md-10" style="margin:100px;">
<input type="submit" value="Save" class="btn btn-danger" />
</div>
</div>
我的代碼中缺少什么,我需要您的幫助嗎?
uj5u.com熱心網友回復:
在您的控制器操作上,引數應該是串列。您需要迭代和更新。
[HttpPost]
public ActionResult Edit(List<RESULT> results)
{
if (ModelState.IsValid)
{
foreach(var item in results)
{
var model =_context.Find(item.ID);
if(model != null) {
model.TestID = item.TestID;
model.TestName = item.TestName;
//update columns you want to update
_context.SaveChanges();
}
}
ViewBag.Message = "Updated Successfully";
return RedirectToAction("Details");
}
return View(results);
}
看法
@if(ViewBag.Message != null){
@ViewBag.Message
}
uj5u.com熱心網友回復:
我找到了解決方案,我將代碼更改如下:
編輯控制器代碼:
public ActionResult Edit(List<RESULT> list)
{
if (ModelState.IsValid)
{
using (db_Entities db = new db_Entities())
{
foreach (var i in list)
{
var c = db.RESULTS.Where(a => a.ID.Equals(i.ID)).FirstOrDefault();
if (c != null)
{
c.RESULT1 = i.RESULT1;
}
}
db.SaveChanges();
}
// ViewBag.Message("Updated Successfully");
return View(list);
}
else
{
// ViewBag.Message("Failed ! Please try again");
return View(list);
}
}
編輯視圖代碼:
<table class="table">
<tr>
<td> @Html.DisplayNameFor(model => model.FirstOrDefault().custid) </td>
<td> @Html.DisplayNameFor(model => model.FirstOrDefault().TESTID) </td>
<td> @Html.DisplayNameFor(model => model.FirstOrDefault().LabTest.TestName) </td>
<td> @Html.DisplayNameFor(model => model.FirstOrDefault().APPROVED_BY) </td>
<td> @Html.DisplayNameFor(model => model.FirstOrDefault().APPROVED_DATE) </td>
<td> @Html.DisplayNameFor(model => model.FirstOrDefault().RESULT1) </td>
</tr>
@for (int i = 0; i < Model.Count; i )
{
<tr>
<td>@Html.HiddenFor(model => model[i].ID)</td>
<td>@Html.EditorFor(model => model[i].custid)</td>
<td>@Html.EditorFor(model => model[i].TESTID)</td>
<td>@Html.EditorFor(model => model[i].LabTest.TestName)</td>
<td>@Html.EditorFor(model => model[i].APPROVED_BY)</td>
<td>@Html.EditorFor(model => model[i].APPROVED_DATE)</td>
<td>@Html.EditorFor(model => model[i].RESULT1)</td>
</tr>
}
</table>
<div class="form-group">
<div class="col-md-offset-2 col-md-10" style="margin:100px;">
<input type="submit" value="Save" class="btn btn-danger" />
</div>
</div>
@*<p style="color:green;font-size:16px;">
@ViewBag.Message
</p>*@
uj5u.com熱心網友回復:
基于@Ram Anugandula Logic修改我們可以在回圈完成后保存資料,因為物件是參考型別,我們可以在修改整個物件后保存
[HttpPost]
public ActionResult Edit(List<RESULT> Input)
{
if (ModelState.IsValid)
{
foreach(var item in Input)
{
var model =_context.Yourdbsetentity.Find(item.ID);
If(model!=null){
model.TestID = item.TestID;
model.TestName = item.TestName;
//update columns you want to update
}else{
model=new RESULT();
model.TestID = item.TestID;
model.TestName = item.TestName;
//Create columns you want to update
_context.Yourdbsetentity.add(model)
}
}
_context.SaveChanges();
return RedirectToAction("Details");
}
return View(results);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/498270.html
標籤:C# asp.net-mvc
下一篇:從復選框更改為單選按鈕
