mwilczynskiで述べたように、ビューには1つのビューモデルしかありません。モデルであるアイデアには、ビューがページをレンダリングするために必要なデータが含まれています。理想的には、それ以上は何もありません。
グリッドをレンダリングするために、データアイテムのコレクションを持つビューモデル(訪問日...次の予定)が必要なように見えます。 これが可能である:
VisitViewModel
がグリッドに表示するためにデータベースから取得したデータが含まれているのviewmodelある
public class VisitorsViewModel
{
public DateTime FromDate { get; set; }
public DateTime ToDate { get; set; }
public ICollection<VisitViewModel> Visits { get; set; }
}
:
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>
ビューには1つのViewModelのみが必要です。 – Ben
mwilczynski私はテキストボックスとして残しておきたいと思っています。残りのフィールドは、以下のイメージで言及しているのと同じようにDbからフェッチしたデータを表示する必要があります。[Eg Op] [3] [3] /i.stack.imgur.com/YqhGm.jpgので、私は別のモデルからプロパティにアクセスする必要があります。 – Susan
次に、DBからの異なるモデルのプロパティを組み合わせた新しい 'ViewModel'を作成します。どうしたの? 'ViewModel'はビューのデータを表現するためのヘルパーです。 – mwilczynski