正如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>
@foreach (var visit in Model.Visits)
{
<tr>
<td>
@Html.DisplayValueFor(m => visit.CustomerName)
</td>
<td>
@Html.DisplayValueFor(m => visit.PoVisit)
</td>
</tr>
}
</table>
一個View應該只有一個ViewModel。 – Ben
mwilczynski我想保持日期和時間作爲文本框,其餘字段需要顯示從Db中獲取的數據,如下圖中提及的[Eg Op] [3] [3]:http:/ /i.stack.imgur.com/YqhGm.jpg所以我必須訪問來自不同模型的屬性。 – Susan
然後創建新的'ViewModel',它結合了來自數據庫的不同模型的屬性。有什麼問題? 'ViewModel'只是這裏的一個輔助工具,用來表示視圖的數據。 – mwilczynski