我嘗試了不同的方法,但我的模型在每次更新時都會被復制。
我通過 HTTP POST 操作將一個 person 物件從我的視圖傳遞給控制器??方法,然后呼叫該.Update(...)方法。
我的觀點是:
@model Falcon.Models.Person
<h2>User @Model.FullName</h2>
<div>
<form method="post" class=container>
<section>
<h4>General information</h4>
<div class=row>
<div class=col-25><label asp-for=Surname></label></div>
<div class=col-75><input asp-for=Surname type="text"/></div>
</div>
<div class=row>
<div class=col-25><label asp-for=Name></label></div>
<div class=col-75><input asp-for=Name type="text"/></div>
</div>
......
<div class=row>
<div class=col-25><label asp-for=Email></label> </div>
<div class=col-75><input asp-for=Email type="email" /></div>
</div>
</section>
<input type="submit" value="Submit changes" asp-action="Edit" asp-controller="Person"/>
</form>
我PersonController的行動是:
[HttpPost]
public async Task<IActionResult> Edit (Person person)
{
db.Persons.Update(person);
await db.SaveChangesAsync();
return RedirectToAction("Index");
}
為什么每次更新操作都會復制我的物件?
uj5u.com熱心網友回復:
您必須為主鍵添加隱藏欄位 - Person.Id。沒有這個物體框架可以決定它是一個新的物件
<input type="hidden" asp-for="Id" />
uj5u.com熱心網友回復:
您正在映射一個Person模型 ( @model Falcon.Models.Person),該模型將由主鍵確定唯一性 - 比方說Person.Id。
由于您沒有將 UI 中的某些內容系結到您的 ID,因此 ASP.NET每次都會生成一個新ID,這意味著它在每次“更新”時都會被識別為一個新人。
將其設為隱藏欄位,以便 ASP.NET 可以傳遞現有Id值,并且知道它是更新操作而不是創建。
<input type="hidden" asp-for="Id" />
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/322260.html
標籤:C# asp.net核心 实体框架核心 asp.net-core-mvc
