我正在使用asp.net core 2.0 mvc編寫應用程序。
這是我的控制器的操作之一:
[HttpPost]
public async Task<IActionResult> MyAction(long id, [Bind("id_person,name")] Person p)
{
ViewBag.message = "";
if (p.name == "")
{
ViewBag.message = "You need to set name.";
}
else if (ModelState.IsValid == false)
{
ViewBag.message = string.Join("; ", ModelState.Values.SelectMany(x => x.Errors).Select(x => x.ErrorMessage));
}
else
{
mydb_context.Update(p);
await mydb_context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(p);
}
這是關聯的cshtml剃刀視圖:
@model myproject.Person
<form asp-action="MyAction">
<div>@ViewBag.message</div>
<input type="hidden" asp-for="id_person" />
<input asp-for="name" />
<input type="submit">
</form>
一切正常:此操作非常適合插入和更新Person。
現在,假設我的Person實體中有第三個字段。例如“年齡”。
我希望此字段保密。這意味著我不希望用戶在他的瀏覽器中看到此信息。我也不想將此信息放在隱藏字段中,因為用戶可能會看到或更改該信息。
我的問題是,如果我保持MyAction和cshtml視圖不變,則當用戶更新一個人時,年齡設置為null。我希望年齡保持其實際值在數據庫中。
有基本的方法嗎?我不想在MyAction方法中手動設置獲取和設置方法,因為我有很多字段。我想使用綁定。
謝謝
我不知道它是否仍在EFCore中可用,但我曾經在EF6中這樣做。
如果只想更新Name屬性,則可以使用mydb_context.Entry()
。
var person = mydb_context.Person.FirstOrDefault(p => p.id_person == id);
if(person != null)
{
mydb_context.Entry(person).Property("name").CurrentValue = "Toto";
mydb_context.SaveChanges();
}
請閱讀以獲取更多詳細信息https://docs.microsoft.com/fr-fr/ef/ef6/saving/change-tracking/property-values