嗨是否可以访问同一视图的不同模型属性
我的VisitorsViewModel模型
public DateTime FromDate { get; set; }
public DateTime ToDate { get; set; }
我的View_VisitorsForm模型
public System.Guid VisitingID { get; set; }
public string Employee { get; set; }
public string CustomerName { get; set; }
public Nullable<System.DateTime> VisitingDate { get; set; }
public string StartTime { get; set; }
public string EndTime { get; set; }
public string SpendTime { get; set; }
public string POVisit { get; set; }
我想在视图中创建5个字段 FromDate , Todate ,客户名称, Povisit , StartTime , EndTime 员工。但所有这些字段属性都在不同的模型中。是否可以在同一视图中访问两个不同的模型属性?我试图按照我的最佳水平来解释我的问题。请任何人给我解决方案。
提前谢谢..
答案 0 :(得分:0)
您应该创建一个新的ViewModel,例如:
public class CombinedVisitorsFormViewModel
{
public DateTime FromDate { get; set; }
public DateTime ToDate { get; set; }
public string Employee { get; set; }
public string CustomerName { get; set; }
public string StartTime { get; set; }
public string EndTime { get; set; }
public string POVisit { get; set; }
}
和Controller
中的每个属性一样(或映射,或者你想要调用它),就像使用当前ViewModel一样。 ViewModel是特定视图/视图的数据表示,因此它可以组合来自其他模型的数据,甚至可以组合与您的数据库Model
不直接相关的数据。
答案 1 :(得分:0)
正如mwilczynski所提到的,视图只有一个视图模型。作为模型的想法包含视图呈现页面所需的数据。理想情况下,没有更多,也没有更少。
从您的图像中,您看起来好像需要一个带有数据项集合的视图模型来呈现网格(访问日期......下一个约会)。 这是可能的:
public class VisitorsViewModel
{
public DateTime FromDate { get; set; }
public DateTime ToDate { get; set; }
public ICollection<VisitViewModel> Visits { get; set; }
}
其中VisitViewModel
是包含从数据库中检索以在网格中显示的数据的viewmodel:
public class VisitViewModel
{
public string CustomerName { get; set; }
public string PoVisit { get; set; }
public string StartTime { get; set; }
public string EndTime { get; set; }
public string Employee { get; set; }
}
控制器看起来像:
public ActionResult displaycustomer()
{
// Get data from database
List<View_VisitorsForm> objvisitlist = (from v in db.View_VisitorsForm select v).ToList();
// Create a new viewmodel and fill it with the data you want displayed
VisitorsViewModel viewmodel = new VisitorsViewModel
{
FromDate = DateTime.Now.AddDays(-7), //(some default value)
ToDate = DateTime.Now, //(some default value)
Visits = new List<VisitViewModel>()
};
foreach (View_VisitorsForm visit in objvisitlist)
{
viewmodel.Visits.Add(new VisitViewModel
{
CustomerName = visit.CustomerName,
PoVisit = visit.POVisit,
StartTime = visit.StartTime,
EndTime = visit.EndTime,
Employee = visit.Employee
}
}
// return a ViewResult with the viewmodel
return View(viewmodel);
}
在视图中,您可以像这样访问ICollection<VisitViewModel>
中的属性(我假设您希望在表格中访问日期):
<table>
@foreach (var visit in Model.Visits)
{
<tr>
<td>
@Html.DisplayValueFor(m => visit.CustomerName)
</td>
<td>
@Html.DisplayValueFor(m => visit.PoVisit)
</td>
</tr>
}
</table>