2012-02-24 20 views
5

Vizör kullanmak yerine MVC'de bir viewmodel kullanmak istiyorum. Tüm denetleyicilerim arasında paylaşılan bazı genel görüntümodelleri oluşturabilmem için bir yol var mı? Bunun için ne tür bir koda ihtiyacım olurdu? Baz denetleyicide bir şeyler yaratmayı düşünüyordum. Mümkün mü?MVC'de genel bir görünüm modeli nasıl oluşturabilirim?

cevap

7

Denetleyiciler ve görünümler arasında veri aktarmak için baskın yöntem, görünümünüze aktarmak istediğiniz verileri temsil eden ve bu model değişkenini görüntüleme yöntemine ileten bir sınıf oluşturmaktır.

/Models/Home/IndexViewModel.cs

namespace MyProject.Models.Home 
{ 
    public class IndexViewModel 
    { 
    public string Message { get; set; } 
    } 
} 

Kontrol/HomeController.cs

public class HomeController 
{ 
    public ActionResult Index() 
    { 
    IndexViewModel model = new IndexViewModel(); 
    model.Message = "Hello World!"; 
    View(model); 
    } 
} 

/Views/Home/Index.cshtml (Tıraş MVC3 olarak)

@Model MyProject.Models.Home.IndexViewModel //strongly-typed view 

<h1>@model.Message</h1> 

Bu basit örneği ele alalım ve özel isteğinize göre geliştirelim. Her görünümün sadece MyClass modelini kullanmasına izin vermek kolay olurdu. Ancak, bu çok esnek hale gelir, bu yüzden tasarımı esnek tutmak için ne yapardım. Bazı görüntülere (bazıları veya hepsi) geçmek istediğiniz bazı veriler olduğunu varsayacağım. modeller SharedData sınıfını gerektirecek için

/Models/SharedData.cs

namespace MyProject.Models 
{ 
    public class SharedData 
    { 
    public DateTime Birthday { get; set; } 
    } 
} 

bir arayüz oluşturun:

birden çok görünüme iletmek istediğiniz verileri temsil sınıf oluşturun.

/Models/ISharedDataViewModel.cs

namespace MyProject.Models 
{ 
    public interface ISharedDataViewModel 
    { 
    public SharedData Data { get; set; } 
    } 
} 

Güncelleme Ev IndexViewModel arayüzü ve shareddata

/Models/Home/IndexViewModel.cshtml

namespace MyProject.Models.Home 
{ 
    public class IndexViewModel: ISharedDataViweModel 
    { 
    public string Message { get; set; } 
    public ShardedData Data { get; set; } 
    } 
} 

kullanmak Paylaşılan verinin nasıl görüntüleneceğini bilen Kısmi bir görünüm oluşturun

/Views/Shared/SharedDataView.cs (Ustura MVC3 içinde)

@Model MyProject.Models.ISharedDataViewModel //strongly-typed partial view 

@if (model != null && model.Data != null) 
{ 
<h3>@model.Data.Birthday.ToString()</h3> 
} 

Güncelleme Ana Dizin sayfa kısmi bir görünüm

/Views/Home/Index.cshtml aramaya

@Model MyProject.Models.Home.IndexViewModel //strongly-typed view 

<h1>@model.Message</h1> 

@Html.Partial("SharedDataView", model) 

Şimdi herhangi bir sayfa sayfalar modeli uygular eğer kısmi görünümü için çağırabilir (Ustura MVC3 cinsinden) ISharedDataViewModel.

+0

^Çok iyi bir açıklama ve en iyi uygulama. – jhartzell

İlgili konular