在ASP.NET Core 5 Razor页面中,为了编辑主/从细节设置而使用常用的模式是加载主记录并将其相关详细信息加载到相应的数据表中。然后,当用户编辑详细信息时,将相应的数据保存到相应的表中。但是,如果用户在编辑详细信息时取消或未保存更改,则会丢失数据。 以下是解决此问题的步骤:
@inject IHttpContextAccessor HttpContextAccessor
@{
var session = HttpContextAccessor.HttpContext.Session;
}
public void SetDetails(T details)
{
var json = JsonSerializer.Serialize(details);
var bytes = Encoding.UTF8.GetBytes(json);
session.Set("Details", bytes);
}
public T GetDetails()
{
var bytes = session.Get("Details");
if (bytes == null) return default(T);
var json = Encoding.UTF8.GetString(bytes);
return JsonSerializer.Deserialize(json);
}
public async Task OnPostSaveDetailsAsync()
{
if (!ModelState.IsValid)
{
return Page();
}
// 保存详细信息到数据库中
if (detailsSavedSuccessfully)
{
session.Remove("Details");
return RedirectToPage("/MasterDetail/Index");
}
else
{
ModelState.AddModelError(string.Empty, "详细信息保存失败。");
return Page();
}
}