如何在 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>