首页 > 解决方案 > 将“所有者”身份传递给相关模型的创建视图

问题描述

我有这个视图模型Employees

public class EmployeeViewModel
{
    public int Id { get; set; }
    // some more properties
    public List<EmployeeReservationViewModel> Reservations { get; set; }
}

...而这个用于EmployeeReservations

public class EmployeeReservationViewModel
{
    public int Id { get; set; }
    public int EmployeeId { get; set; }
    // some more properties
    public EmployeeViewModel Employee { get; set; }
}

Employees Details-view 中,我有一个用于添加新的链接EmployeeReservation,如下所示:

<a asp-controller="EmployeeReservations" 
   asp-action="Create">Add reservation</a>

我应该如何将其传递EmployeeIdEmployeeReservations/Create-View?

目前,我Employees在控制器的 Details 方法中使用了一个会话变量,如下所示:

HttpContext.Session.SetInt32("EmployeeId", employee.Id);

...然后在 -controller 的 Create POST 方法中检索它EmployeeReservations

employeeReservation.EmployeeId = HttpContext.Session.GetInt32("EmployeeId").Value;
db.Add(employeeReservation);
await db.SaveChangesAsync();

我感觉我的方法不是最优的。如果会话超时怎么办?还有另一种更安全的方法吗?

标签: c#asp.net-core-mvc

解决方案


您可以使用 asp-route-id

在视图中

<a asp-controller="EmployeeReservations" 
   asp-action="Create" asp-route-id="10">Add reservation</a>

在控制器中添加 id 作为参数创建操作

Public IActionResult Create(string id){
}

推荐阅读