2016-04-03 27 views
-2

Hi aynı görünüm için farklı bir model özelliklerine erişmek için mümkün müMvc4'te aynı görünümde farklı model özelliklerine nasıl erişilir?

Benim VisitorsViewModel modeli

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

Benim View_VisitorsForm Modeli

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

ben 5 alanları oluşturmak istiyorum view FromDate, Todate, MüşteriAdı, Povisit, StartTime, EndTimeÇalışan. Ancak tüm bu alanların özellikleri farklı modellerde. Aynı görünümde iki farklı model özelliklerine erişmek mümkün mü? Sorunumu en iyi seviyeme göre açıklamaya çalıştım. lütfen bana bir çözüm verin.

Peşin teşekkürler ..

+0

A Görünüm yalnızca bir ViewModel'e sahip olmalıdır. – Ben

+0

mwilczynski metin kutuları olarak saklamak ve güncel tutmak istiyorum ve kalan alanlar aşağıdaki görüntüden bahsedildiği gibi Db gelen gibi getirilen verileri görüntülemek gerekir [Ör Op] [3] [3]: http://i.stack.imgur.com/YqhGm.jpg böylece farklı modellerden özelliklerine erişmek zorundayım. – Susan

+0

Ardından, DB'den gelen farklı modellerin özelliklerini birleştiren yeni 'ViewModel 'oluşturun. Sorun ne? ViewModel, görünüm için verileri temsil etmek için sadece bir yardımcıdır. – mwilczynski

cevap

0

mwilczynski tarafından belirtildiği gibi, bir görünümün yalnızca bir görünüm modeli vardır. Model olma fikri, sayfanın görüntülenmesi için görünümün tam olarak içerdiği verileri içerir. İdeal olarak, hiçbir şey ve daha az şey.

Görüntünüzden, ızgarayı oluşturmak için bir veri öğeleri koleksiyonuna sahip bir viewmodel'e ihtiyacınız var gibi görünüyor (ziyaret tarihi ... Sonraki randevu). bu mümkündür: VisitViewModel ızgara göstermek için veritabanından alınan verileri içeren ViewModel olan

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

benzer görünümde olacaktır kontrolör:

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); 
} 

Görünümde, ICollection<VisitViewModel>'daki özelliklere bu şekilde erişebilirsiniz (ziyaret tarihini bir tabloda görmek istediğinizi varsayalım):

<table> 
@foreach (var visit in Model.Visits) 
{ 
    <tr> 
     <td> 
      @Html.DisplayValueFor(m => visit.CustomerName) 
     </td> 
     <td> 
      @Html.DisplayValueFor(m => visit.PoVisit) 
     </td> 
    </tr> 
} 
</table> 
+0

Arnoud bu benim denetleyici kodumdur public ActionResult displaycustomer() {List objvisitlist = (from db.View_VisitorsForm select v) .ToList(); View();} döndürün ve ben bir başka modelde cevabınızda bahsettiğinize göre bir modeli arayın ve söylediğiniz her şeyi yaptım ama hata alıyorum. Sayfa açıldığında veri listesini yüklemek istiyorum bu yüzden ben bu liste kodu (denetleyicideki ) yazdım şimdi hangi nesnede hangi objvisitlist (controller object) veya Visits (model nesnesi) içinde aramak zorunda şüphe var. Lütfen bu şüphe açıklığa kavuşturun – Susan

+0

Denetleyicide alınmakta olan verileri görüyorum ama görünmüyor/görünüme geri dönülmez.Yeni bir viewmodel oluşturulmasını ve linq sonucundan elde edilen verilerin bu yeni viewmodel'in Ziyaretleri'ne kopyalanmasını beklerim. model oluşturuldu, Görünüm yönteminin bir görünümü olarak görünümüne geçirilmelidir: Görünüm (viewmodel) görünümü, Oh, ve ben görünüm modülleri varlık koyamazsınız. Yorumunuz View_VisitorsForm anladım Ben bir viewmodel olarak değil Daha önce düşündüm, ama bir (veri tabanı) varlığım. Netleştirmek için cevabımı güncellemeye çalışacağım. –

0

Sadece gibi yeni bir ViewModel, oluşturmalısınız:

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

Ve tel (veya haritaya veya nasıl istiyorsa öyle diyorsanız) sizin Controller her özellik, Geçerli ViewModels ile yaptığınız gibi. ViewModel, belirli görünümleriniz/görünümleriniz için bir veri temsilidir, bu nedenle diğer modellerden veya hatta DB Model ile doğrudan ilgili olmayan verileri birleştirebilir.