gpt4 book ai didi

c# - ASP.NET MVC 传递多个模型以从 Controller 查看

转载 作者:行者123 更新时间:2023-11-30 19:39:02 26 4
gpt4 key购买 nike

我需要一个 View 来显示员工的名字和姓氏以及员工关联的主管的名字和姓氏。

我有 2 个模型,它们如下:

public class Employee
{
public int EmployeeID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Department { get; set; }
public int SupervisorID { get; set; }

public virtual ICollection<Supervisor> Supervisor { get; set; }
}

public class Supervisor
{
public int SupervisorID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Phone { get; set; }
public string Email { get; set; }
public string Department { get; set; }

public virtual Employee Employee { get; set; }
}

为了显示所需的数据,我创建了另一个模型:

public class EmployeeSupervisor
{
public int EmployeeID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Department { get; set; }

public string SupFirstName { get; set; }
public string SupLastName { get; set; }
public string SupPhone { get; set; }
public string SuoEmail { get; set; }
public string SupDepartment { get; set; }
}

在 Controller 的详细操作中,我执行以下操作:

Employee employee = db.Employees.Find(id);
Supervisor supervisor = db.Supervisors.Find(employee.SupervisorID);

EmployeeSupervisor es = new EmployeeSupervisor
{
EmployeeID = employee.EmployeeID,
Department = employee.Department,
FirstName = employee.FirstName,
LastName = employee.LastName,
SupFirstName = supervisor.FirstName,
SupLastName = supervisor.LastName,
SuoEmail = supervisor.Email,
SupPhone = supervisor.Phone,
SupDepartment = supervisor.Department
};

return View(es);

然后在 View 中我有

@model TimeOffV3.Models.EmployeeSupervisor

然后最后我在 View 中执行以下操作

@Html.DisplayFor(model => model.FirstName)
@Html.DisplayFor(model => model.LastName)
@Html.DisplayFor(model => model.SupFirstName)
@Html.DisplayFor(model => model.SupLastName)

当我使用 EmployeeSupervisor 模型类完成上述任务时, Entity Framework 会在数据库中为 EmployeeSupervisor 创建一个对应的表(如预期的那样)。这让我相信我的做法是错误的,因为我无法想象每次我想显示来自 2 个不同模型的数据时,我都需要创建一个新的对应模型和表格。

我的实现方式是否正确?我应该能够使用 Employee 类中定义的导航属性访问主管信息吗?我能否传入多个模型,这样我就不必创建包含来自 2 个独立模型的信息的模型?

最佳答案

确实 View 只接收一个模型,但这个模型不必是平面的。您的 View 模型可以包含每个实体的单独属性

public class EmployeeSupervisor
{
public Employee Employee { get; set; }
public Supervisor Supervisor{ get; set; }
}

在您看来,您与他们的合作如下:

   @Html.DisplayFor(model => model.Employee.FirstName)
@Html.DisplayFor(model => model.Employee.LastName)
@Html.DisplayFor(model => model.Supervisor.FirstName)
@Html.DisplayFor(model => model.Supervisor.LastName)

您应该知道的另一件事是, View 不必与实体(在数据库中具有相应表的实体)一起使用。您可以创建一个仅包含 View 中使用的属性的 ViewModel。有一些库可以帮助您在 ViewModel 和实体之间进行映射,例如 AutomapperValueInjecter

例如,如果您需要在 View 中仅显示员工和主管的全名,您的 View 模型可能如下所示:

public class EmployeeSupervisorViewModel
{
public string EmployeeName { get; set; }
public string SupervisorName { get; set; }
}

和 Controller :

    Employee employee = db.Employees.Find(id);
Supervisor supervisor = db.Supervisors.Find(employee.SupervisorID);

var model = new EmployeeSupervisorViewModel
{
EmployeeName = string.Format("{0} {1}",employee.FirstName, employee.LastName),
SupervisorName = string.Format("{0} {1}",supervisor.FirstName, supervisor.LastName),
};

return View(model);

EmployeeSupervisorViewModel 不是实体,不应该有数据库表它仅在 View / Controller 级别使用,并且仅包含 View 所需的信息(您要呈现给客户)

关于c# - ASP.NET MVC 传递多个模型以从 Controller 查看,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29806129/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com