6

MVC'ye yeni geldim, bu belki de aptalca bir soru - Kafamı asp cinsinden güçlü yazılan görünümler almaya çalışıyorum. net mvc. 3 model üzerinde çalışıyorum. 2 modelli bir projem varsa - Kişi ve Departman deyin. Bir kişi bir bölüme ait olmalıdır. Yani benim Bölümü modeli var (ve benim denetleyici ve CRUD arayüzünü oluşturduktan):ASP.NET MVC3, neden açılan liste güçlü bir şekilde yazılan görünümde bile viewbag'e güveniyor

public class Person 
{ 
    public int Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 

    public int Department_Id { get; set; } 
    [ForeignKey("Department_Id") 
    public virtual Department Department { get; set;} 
} 

Şimdi benim Kontrolörü ve Görüntüleme oluşturmak:

public class Department 
{ 
    public int Id { get; set;} 
    public string DeparmentName { get; set;} 
} 

Sonra Bölümü başvuran bir Kişi modeli var . Ben PersonController içine baktığımda Şimdi, aşağıdaki adres oluşturun:

public ActionResult Create() 
{ 
    ViewBag.Department_Id = new SelectList(db.Deparments, "Id", "DepartmentName"); 
    return View(); 
} 

ve Kişi \ Create.cshtml içinde

, Bölüm açılan oluşturmak için kod I olarak

@Html.DropDownList("Department_Id", String.Empty) 

olduğunu Bunu anlamak için, DropDownList Html yardımcısı, açılır listeyi oluşturmak için ViewBag'ı kullanıyor. Ancak, FirstName ve LastName giriş alanları ViewBag'a güvenmeden oluşturulmuş gibi görünüyor - bu yüzden Görünümümde, Görünümüm güçlü bir şekilde yazıldığından, ancak benim DropDownList öğesinde olmadığından, Ad ve Soyad alanımı kontrol etme zamanı derleyebilirim.

Bölüm için DropDownList neden yazılmamış veya yanlış bir şey yapıyorum ve güçlü bir şekilde yazılmasını sağlamak için bir yol var mı? Eğer kesinlikle yazılı görüşlerini kullanırken, size görünümüne geçmesine kesinlikle yazılı modele sahip olursa

Teşekkür :)

cevap

5

Görüntüleme çantanıza gereksinim duymanızın nedeni, görüşünüzün bağlandığı Kişi örneğinizin tüm olası bölümler için verilere sahip olmaması, yalnızca ait olduğu tek bölümdür. Ne bu satırda olur:

ViewBag.Department_Id = new SelectList(db.Deparments, "Id", "DepartmentName"); 

DB'den tüm Bölümler değeri olarak departmanadi asn anahtar olarak kimliğine sahip (sizin Açılan bağlanmasına için) Select Listesine eklenen mı. Görüşünüz Kişiye bağlı olduktan sonra, açılan menü ilgili Bölümü gösterecektir.

+0

Merhaba Edwin - teşekkür ederim - bu tür bir mantık var - tek bir Kişi bir Department_ID'ye sahip, ancak bu görüşün Bölümler ile olan ilişkisini tanımlayan Kişi modelime bağlandığını düşündüm. "sanal" özellik? Belki de MVC çerçevesinde çok fazla "büyü" arıyorum. – Rick

+0

@Rick: Sanırım öyle olsun. Görünüm sadece Kişiniz tarafından tanımlanan tek Departmana bağlanır.Departmanların tam listesini aktarmak için viewbag'i kullanın. Bu arada, ViewBag, dinamik özellikler oluşturmanıza izin veren ViewData (diğer cevaptan) etrafında bir sarıcıdır. –

2

: seni kontrolör içinde Sonra

public class ViewData { 
    public IList<Departments> Departments {get; set;} 
} 

var:

:
public ActionResult Create() 
{ 
    ViewData model = new ViewData(); 
    model.Departments = db.Deparments; 
    return View(model); 
} 

son adım seçim listesini oluşturmak ve görünümde aşağı bırakmaktır

Umarım bu mantıklıdır.

+0

Merhaba Steve - teşekkürler - "ViewModel" oluşturduğunuz ViewData sınıfı nedir? – Rick

+0

Evet, genellikle tüm modellerini çözümdeki modeller klasörüne koyarım. Genelde onlara {viewName} ViewData.cs adını veriniz. – Steve

İlgili konular