如何在 mvc4 的同一视图中访问不同的模型属性?可能吗?
How to access different model properties in same view in mvc4?Is it possible?
您好是否可以访问同一视图的不同模型属性
我的 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; }
我想在视图 FromDate,Todate,CustomerName,Povisit ,StartTime,EndTime Employee。但是所有这些字段在不同模型中的属性。是否可以在同一视图中访问两个不同的模型属性?我试着按照我的水平最好地解释我的问题。请任何人给我解决方案。
提前致谢..
您应该创建一个新的 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 是您特定 view/views 的数据表示,因此它可以组合来自其他模型的数据,甚至是与您的数据库 Model
完全不直接相关的数据。
正如 mwilczynski 所提到的,一个视图只有一个视图模型。模型的想法恰好包含视图呈现页面所需的数据。理想情况下,不多也不少。
从您的图片看来,您似乎需要一个包含数据项集合的视图模型来呈现网格(访问日期...下一次约会)。
这是可能的:
public class VisitorsViewModel
{
public DateTime FromDate { get; set; }
public DateTime ToDate { get; set; }
public ICollection<VisitViewModel> Visits { get; set; }
}
其中 VisitViewModel
是包含要在网格中显示的从数据库检索的数据的视图模型:
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 中的访问日期):
<table>
@foreach (var visit in Model.Visits)
{
<tr>
<td>
@Html.DisplayValueFor(m => visit.CustomerName)
</td>
<td>
@Html.DisplayValueFor(m => visit.PoVisit)
</td>
</tr>
}
</table>
您好是否可以访问同一视图的不同模型属性
我的 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; }
我想在视图 FromDate,Todate,CustomerName,Povisit ,StartTime,EndTime Employee。但是所有这些字段在不同模型中的属性。是否可以在同一视图中访问两个不同的模型属性?我试着按照我的水平最好地解释我的问题。请任何人给我解决方案。
提前致谢..
您应该创建一个新的 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 是您特定 view/views 的数据表示,因此它可以组合来自其他模型的数据,甚至是与您的数据库 Model
完全不直接相关的数据。
正如 mwilczynski 所提到的,一个视图只有一个视图模型。模型的想法恰好包含视图呈现页面所需的数据。理想情况下,不多也不少。
从您的图片看来,您似乎需要一个包含数据项集合的视图模型来呈现网格(访问日期...下一次约会)。 这是可能的:
public class VisitorsViewModel
{
public DateTime FromDate { get; set; }
public DateTime ToDate { get; set; }
public ICollection<VisitViewModel> Visits { get; set; }
}
其中 VisitViewModel
是包含要在网格中显示的从数据库检索的数据的视图模型:
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 中的访问日期):
<table>
@foreach (var visit in Model.Visits)
{
<tr>
<td>
@Html.DisplayValueFor(m => visit.CustomerName)
</td>
<td>
@Html.DisplayValueFor(m => visit.PoVisit)
</td>
</tr>
}
</table>