在ASP.NET Core 6.0 Razor Web Pages中,如果需要在一个编辑页面中实现1:n关系,可以按照如下步骤操作。
1.创建一个ViewModel类,用于在页面上绑定所有相关模型实体。例如:
public class EditViewModel
{
public Person Person { get; set; }
public List Hobbies { get; set; }
}
其中,Person表示单个实体,Hobbies则表示一个实体列表。
2.在控制器中获取实体并将它们传递给ViewModel。例如:
public IActionResult Edit(int id)
{
var person = _dbContext.Persons.Find(id);
if (person == null)
{
return NotFound();
}
var hobbies = _dbContext.Hobbies.Where(h => h.PersonId == id).ToList();
EditViewModel viewModel = new EditViewModel
{
Person = person,
Hobbies = hobbies
};
return View(viewModel);
}
其中,_dbContext是DBContext的实例,Persons和Hobbies是DbSet
3.在视图中使用ViewModel绑定每个控件。例如:
@model EditViewModel
其中,asp-for属性用于将ViewModel中的属性绑定到HTML中的控件。
4.在提交表单时,控制器会接收到ViewModel,需要更新数据库中的实体。例如:
[HttpPost]
public IActionResult Edit(EditViewModel viewModel)
{
var person = _dbContext.Persons.Find(viewModel.Person.Id);
if (person != null)
{
person.Name = viewModel.Person.Name;
foreach (var hobby in viewModel.Hobbies)
{
var dbHobby = _dbContext.Hobbies.Find(hobby.Id);
if (dbHobby != null)
{
dbHobby.Selected = hobby.Selected;
}
}
_dbContext.SaveChanges();
}
return RedirectToAction(nameof(Index));
}
其中,_dbContext是DBContext的实例,Persons和Hobbies是DbSet
通过以上步骤,就可以在一个编辑页面中实现1:n关系。