SORU
16 Mart 2011, ÇARŞAMBA


MVC3 kullanarak Varlık Çerçevesi için bir Açılan Liste oluşturmak (.Model edmx) & Jilet Manzarası && Birden fazla Tablo için Veritabanı Kayıt Ekleme

Jilet Manzaralı MVC 3'te Açılır Liste oluşturma hakkında burada makaleler 100 okuduktan sonra, benim durumumda uygun bir tane bulamadım. Yani cevap ararken Saatler sonra kimseye cevap veya bana yardımcı olabilir eğer görmek için bu konuyu açmaya karar verdim. Şimdiden teşekkürler!!!

Durum: Sonuçta bir Veritabanı için bir Çalışan Eklemek için bir Görünüm oluşturmak için çalışıyorum.

İşte bir resim .Ben kullanıyorum bu Modeli EDMX (tarafından kullanılacak tablolar oluşturun().):

enter image description here

Amaç:

  1. (Oluşturmak var.bir Çalışan oluşturmak cshtml (kesinlikle yazılmış) ile yapılan Kısmi Görüntülemek için StaffNotify Kutularını) {ben kullanarak bir ayrı @modelinde Bildirmek Kısmi Görünüm Oluşturmak Görünüm değil emin eğer bu güvenli mi??? @ShadowVenue model.Modelleri.& @Çalışan modeli ShadowVenue.Modelleri.StaffNotify)

  2. Oluşturun bir Açılan kutu için StaffTypeİd (will Ekle [StaffTypeİd] değeri Tablosu "StaffType" (olan bir 1'e çok ilişki), ama will show [Tür] dize değeri açılır)

  3. Oluşturun bir Açılan kutu için Genderİd (will Ekle [Genderİd] değeri Tablosu "Cinsiyet" (olan bir 1'e çok ilişki), ama will show [Cinsiyet] dize değeri açılır)

  4. Veritabanına Kayıt (Staffİd Birincil Anahtar 1'e 1 ilişki ile ayrı bir tabloda Personel Bildirimleri var) Ekle

Bunun için Denetleyici kod ile sorun yaşıyorum.

Eğer EDMX modeli içinde Saklı Yordam oluşturmak konusunda emin değilim, ya da bir sorgu veya yöntemi olan, en iyi yolu sözdizimi emin değilim.

İlk Büyük MVC3 uygulamam Varlık çerçevesini kullanarak bu Modeli.

Zaman ayırdığınız için teşekkür ederim. Ben gerçekten bu sitede bilgili kullanıcılar takdir ediyorum.

(çözüm varsa bana bildirin sadece yardım etmek için Navigasyon Özelliği Adlarını bilmen gerekiyorsa, onları size sunacağım)

CEVAP
16 Mart 2011, ÇARŞAMBA


Doğrudan görüşleriniz için db modelleri geçemiyor. MVC kullanarak olacak kadar şanslıysanız, görünüm modelleri kullanarak şifreleyebilir.

Bu gibi: görünüm model bir sınıf oluşturun

public class EmployeeAddViewModel
{
    public Employee employee { get; set; }
    public Dictionary<int, string> staffTypes { get; set; }
    // really? a 1-to-many for genders
    public Dictionary<int, string> genderTypes { get; set; }

    public EmployeeAddViewModel() { }
    public EmployeeAddViewModel(int id)
    {
        employee = someEntityContext.Employees
            .Where(e => e.ID == id).SingleOrDefault();

        // instantiate your dictionaries

        foreach(var staffType in someEntityContext.StaffTypes)
        {
            staffTypes.Add(staffType.ID, staffType.Type);
        }

        // repeat similar loop for gender types
    }
}

Denetleyici:

[HttpGet]
public ActionResult Add()
{
    return View(new EmployeeAddViewModel());
}

[HttpPost]
public ActionResult Add(EmployeeAddViewModel vm)
{
    if(ModelState.IsValid)
    {
        Employee.Add(vm.Employee);
        return View("Index"); // or wherever you go after successful add
    }

    return View(vm);
}

Sonra, nihayet görünümünde Visual Studio ilk iskele için kullanabileceğiniz (), ShadowVenue devralınan türünü değiştirin.Modelleri.EmployeeAddViewModel. Listeler aşağı açılır bir yer, kullanın:

@Html.DropDownListFor(model => model.employee.staffTypeID,
    new SelectList(model.staffTypes, "ID", "Type"))

ve benzer şekilde cinsiyet açılan için

@Html.DropDownListFor(model => model.employee.genderID,
    new SelectList(model.genderTypes, "ID", "Gender"))

Yorum başına güncelleştirin

İçin cinsiyet, olabilir de bu olabilir olmadan genderTypes yukarıdaki önerilen view model (gerçi, düşündüm de, belki de ben ... oluşturmak bu sunucu tarafı görünümü model IEnumerable). Yani, new SelectList... yer altında, IEnumerable kullanmak istiyorsunuz.

@Html.DropDownListFor(model => model.employee.genderID,
    new SelectList(new SelectList()
    {
        new { ID = 1, Gender = "Male" },
        new { ID = 2, Gender = "Female" }
    }, "ID", "Gender"))

Son olarak, başka bir seçenek, bir Arama tablosu. Temel olarak, anahtar-değer çiftleri bir Arama türüne sahip. Türünün tek örneği bir Devlet, vs. olsa da cinsiyet olabilir. Benimki yapısı böyle ben gibi:

ID | LookupType | LookupKey | LookupValue | LookupDescription | Active
1  | Gender     | 1         | Male        | male gender       | 1
2  | State      | 50        | Hawaii      | 50th state        | 1
3  | Gender     | 2         | Female      | female gender     | 1
4  | State      | 49        | Alaska      | 49th state        | 1
5  | OrderType  | 1         | Web         | online order      | 1

Ben veri kümesi çok sık değiştirmiyor bu tabloları kullanmak ister, ama hala zaman zaman numaralandırılmış olmalıdır.

Bu yardımcı olur umarım!

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Klemens Torggler

    Klemens Torg

    11 Mart 2008
  • MkElite

    MkElite

    13 NİSAN 2012
  • PaulGBelliveau

    PaulGBellive

    5 Mart 2009