如何在mvc4中的同一视图中访问不同的模型属性?有可能吗?

时间:2016-04-03 12:31:09

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

嗨是否可以访问同一视图的不同模型属性

我的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 员工。但所有这些字段属性都在不同的模型中。是否可以在同一视图中访问两个不同的模型属性?我试图按照我的最佳水平来解释我的问题。请任何人给我解决方案。

提前谢谢..

2 个答案:

答案 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>