将多个模型传递给 ASP.NET MVC 中的视图
Posted
技术标签:
【中文标题】将多个模型传递给 ASP.NET MVC 中的视图【英文标题】:Passing more than one model to the view in ASP.NET MVC 【发布时间】:2019-01-10 11:26:12 【问题描述】:我需要在同一个视图中传递两个模型,但是有些元素具有相同的名称。
我有两个模型Employee
和HolidayRequestForm
,我需要在一个视图中使用这两个模型,这将是每个员工的详细信息页面。
这是我的Employee
:
public partial class Employee
public int EmployeeID get; set;
public string FullName get; set;
public string EmailID get; set;
public string Password get; set;
public System.DateTime StartDate get; set;
public int RoleID get; set;
public int ShiftID get; set;
public int AreaID get; set;
public int DisciplineID get; set;
public int SiteID get; set;
public int ALCategory get; set;
public Nullable<int> HoursTaken get; set;
public Nullable<int> AwardedLeave get; set;
public Nullable<int> TotalHoursThisYear get; set;
public int HoursCarriedForward get; set;
public Nullable<int> EntitlementRemainingThisYear get; set;
public string Comments get; set;
这是我的HolidayRequestForm
:
public partial class HolidayRequestForm
public int RequestID get; set;
public int EmployeeID get; set;
public System.DateTime StartDate get; set;
public System.DateTime FinishDate get; set;
public int HoursTaken get; set;
public string Comments get; set;
public int YearCreated get; set;
public int MonthCreated get; set;
public Nullable<int> DayCreated get; set;
public Nullable<int> YearOfHoliday get; set;
我尝试创建一个单独的模型,其中包含要在视图中使用的所有元素,但我不确定如何区分具有相同名称的元素,例如。评论 甚至可以这样做吗?
我想在我的视图中使用这两个模型,因为我想创建一个员工资料页面,他们的信息在顶部显示有关他们的个人资料的信息,然后是他们在表格中使用 holidayrequestform 请求的假期页面底部。
【问题讨论】:
【参考方案1】:编写一个ViewModel
,其中包含Employee
和HolidayRequestForm
,如下所示,然后将ViewModel
传递给视图:
public class EmployeeViewModel
public Employee Employee get; set;
public HolidayRequestForm HolidayRequestForm get; set;
然后在你的操作方法中:
public ActionResult EmployeeDetails(int id)
Employee employee = _dbContext.Employees.FirstOrDefault(emp => emp.EmployeeID == id);
HolidayRequestForm holidayRequestForm = _dbContext.HolidayRequestForms.FirstOrDefault(hrf => hrf.EmployeeID == id);
EmployeeViewModel employeeViewModel = new EmployeeViewModel()
Employee = employee,
HolidayRequestForm = holidayRequestForm
return View(employeeViewModel);
然后在视图中,访问模型属性如下:
@model EmployeeViewModel
<p>Full Name: @Model.Employee.FullName</p>
【讨论】:
我应该如何将模型绑定到视图?会不会像@model LotusWorksHT.Models.EmployeeViewModel
LotusWorksHT 一样是项目的名称。
是的!它应该是完全限定的命名空间!如果您的EmployeeViewModel
位于LotusWorksHT
项目的Models
文件夹中,那么它应该是@model LotusWorksHT.Models.EmployeeViewModel
,如您所说。
嗯,当我使用 Full Name: @Model.Employee.FullName
时,我得到一个空异常。但后来我尝试了@html.DisplayNameFor(model => model.Employee.FullName)
并没有显示任何数据。我怀疑数据没有被传递到视图中?还是它弄乱了模型?感谢所有的帮助,无论如何它让我开始了。
@Conor8630 这意味着EmployeeViewModel
中的Employee
为空!在方法中调试以确保它是否从数据库中提取Employee
数据。
让我们continue this discussion in chat。以上是关于将多个模型传递给 ASP.NET MVC 中的视图的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET MVC 视图需要将选定的下拉列表和日历日期传递给模型
如何将项目列表从视图传递到控制器(ASP.NET MVC 4)
如何将两个模型组合成一个模型并使用 asp.net MVC razor 将其传递给查看