如何在mvc4中的同一视图中使用不同的模型?

时间:2016-04-04 06:42:26

标签: c# asp.net-mvc

My Main View

这是我的看法。如果我打开这个视图,它想要加载下面图片中提到的所有数据列表,例如

List of data to display

但FromDate,ToDate和VisitingDate,CustomerName,EmployeemPurpose of visit,ContactPerson Email的属性有不同的模式。

我的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; }

所以我决定在同一视图中访问两个模型属性,所以我在另一个模型中调用一个模型属性,这在下面的模型中提到

我的VisitorsViewModel模型

  public DateTime FromDate { get; set; }
  public DateTime ToDate { get; set; }

  public ICollection<View_VisitorsForm> Visits { get; set; } 

我的控制器代码

  public ActionResult displaycustomer()
  {
  List<View_VisitorsForm> objvisitlist = (from v in db.View_VisitorsForm select v).ToList();
  return View(objvisitlist);
  }

这是我的控制器代码

   List<View_VisitorsForm> objvisitlist = (from v in db.View_VisitorsForm select v).ToList();

这是列出所有数据的查询。

我的观点

  @model Sample_Customer.View_VisitorsForm
 @{
    ViewBag.Title = "DailyVisitReport";
  }

  <div class="text-center">
  <h2 style="color: #0000FF">Visit Report</h2>
  </div>
  <link href="~/Content/bootstrap.min.css" rel="stylesheet" />
  <link href="~/Content/bootstrap.css" rel="stylesheet" />
  <script src="~/Content/BootStrap/js/bootstrap.js"></script>
  <script src="~/Content/BootStrap/js/bootstrap.min.js"></script>

  <div class="col-xs-12">
  <div class="container">
  <div class="col-sm-4">
  <div class="form-group">
  @Html.LabelFor(model=>model.FromDate)
  @Html.TextBoxFor(model=>model.FromDate,new { @class = "form-control", type = "text" })

  </div>
  </div>
  <div class="col-sm-4">
  <div class="form-group">

  @Html.LabelFor(model => model.ToDate)
  @Html.TextBoxFor(model => model.ToDate, new { @class = "form-control", type = "text"})

 </div>
 </div>
 <div class="col-sm-5">
 <div class="form-group">
 <input id="Button1" type="button" value="Ok" />
 </div>
 </div>
 </div>
 </div>

 <table class="table table-bordered table-striped">
 <thead>
 <tr>
 <th style="color: #1a1ae9">Visiting Date</th>
 <th style="color: #1a1ae9">Customer Name</th>
 <th style="color: #1a1ae9">Employee</th>
 <th style="color: #1a1ae9">Purpose of Visit</th>
 <th style="color: #1a1ae9">Contact Person</th>
 <th style="color: #1a1ae9">Description</th>
 <th style="color: #1a1ae9">Next Appointment</th>
 </tr>
 </thead>

 <tbody>
 @foreach (var i in Model.??)in this place ?? i donno which object i have to call here
 {
 <tr>
 <td>
 @Convert.ToString(string.Format("{0:MMM-dd-yyyy}", i.VisitingDate))
 </td>
  <td>
  @i.CustomerName
  </td>
  <td>
 @i.Employee
  </td>
  <td>
 @i.POVisit
 </td>
 <td>
 @i.ContactPerson
 </td>
 <td>
 @i.Description
 </td>
  <td>
  @Convert.ToString(string.Format("{0:MMM-dd-yyyy}", i.NextAppointment))
  </td>
  </tr>
   }
   </tbody>
  </table>

我怀疑是通过

调用VisitorsViewmodel中的一个模型(view_visitorsForm)
 public ICollection<View_VisitorsForm> Visits { get; set; }

当我打开页面时,我必须列出视图中的所有数据。所以在控制器中我写了这段代码

  List<View_VisitorsForm> objvisitlist = (from v in db.View_VisitorsForm select v).ToList();

现在我通过将模型名称设为 VisitorsViewModel 来创建视图。现在我的疑问是我必须在 ?? (在foreach行中)调用哪个对象。所以当我打开页面时它会显示所有数据..

我试图按照我的水平解释我的问题,请任何人了解我的问题并帮助我解决这个问题。

预感谢。

3 个答案:

答案 0 :(得分:2)

每当您需要在View中使用多个模型时,建议您创建一个包装器ViewModel类。并且您已通过创建VisitorsViewModel来完成此操作。但是,当您已经拥有VisitorsViewModel模型且具有来自及迄今为止的属性时,您还可以在VisitorsViewModel中拥有此类的属性,但这是一个单独的内容。

现在回到您的问题,确保您已将ViewVisitorsViewModel模型绑定。

在您的控制器方法中,首先创建模型的实例,初始化Visits属性并将其传递给view。像这样的东西 -

    public ActionResult displaycustomer()
    {
        List<View_VisitorsForm> objvisitlist = (from v in db.View_VisitorsForm select v).ToList();

        VisitorsViewModel model = new VisitorsViewModel();
        model.Visits = objvisitlist; 

        return View(model);
    }

...在您的View中,您可以访问此对象,例如 -

@foreach (var i in Model.Visits)

答案 1 :(得分:0)

您可以像这样使用 Tuple ..

@model Tuple<FirstModel, SecondModel>

<div> 
    @Model.Item1.FirstModelProp
    @Model.Item2.SecondModelProp
</div>

答案 2 :(得分:0)

您可以创建包含其他模型的模型