2009-08-13 18 views
6

FluentNhibernate ve Asp.net MVC kullanıyorum bir sitem var. Kullanıcının, o kayıt için (10) 10 özellikten 8'ini düzenlemesine izin veren bir Düzenleme görünümüm var. Formu gönderdiğinizde ve Model bağlandığında, düzenlenemeyen iki alan görünüm modeline Boş dizeler olarak veya özellik türüne bağlı olarak varsayılan DateTime değerleri olarak gelir.Görüntüleme modeliniz etki alanı modeliniz kadar çok alana sahip olmadığında MVC'deki değerleri nasıl görmezden geliyorsunuz/tutarsınız?

Ayrıca, Görüntüleme modelimi Etki Alanı Varlık'ımla eşleştirmek için AutoMapper kullanıyorum, yalnızca nesneyimin yeni bir kopyasını veritabanından yükleyemiyorum ve 2 eksik özelliği elle ayarlayamıyorum. Düzenlemediğim alanları düzeltmenin en iyi yolu nedir?

İşin bir yolu, Görünümümdeki gizli Giriş alanlarındaki değerleri devam ettirmektir. Bu işe yarıyor ama iğrenç geliyor. Önerileri takdir ediyorum. AutoMapper'ımda bu istenen işlevselliği yapılandırmanın bir yolu var mı?

GÜNCELLEME: Tamam, Ben de, ben null veya boş dize değerlerini geçerli olmaz emin olmak için çalışıyorum alanlarını göz ardı etmeye çalışmıyorum sanırım. AutoMapper'daki alanları göz ardı etmek bunu yapar, göz ardı edilir ve depoya kaydedilmeden önce bunları eşlemeye çalıştığımda null olurlar.

+0

Düzenlenemeyen alanların görünüm modelinin bir parçası olmasının bir nedeni var mı? – mxmissile

+0

Şu anda sorunun bir parçası gibi görünen görünüm modelinin bir parçası değiller. Alanlar 'EklendiBy' ve 'Tarih Eklendi'. Bu nesne oluşturulduktan sonra asla değiştirilmemelidir. Bu verileri kaybetmeden Düzenleme görünümü oluşturmaya çalışıyordum. Automapper null'ın bu görünüm modelimi modelimden – shanabus

cevap

2

Asp.net mvc DefaultModelBinder genişletilebilir ve kendi ciltleme şemasını oluşturmak için bunu geçersiz kılabilirsiniz. Ancak bu, benim bakış açıma göre, brüt değil, iki "gizli Giriş alanından" daha fazla çalışmayı içerecektir.

+1

Gizli giriş alanlarının brüt olduğunu düşünüyorum. Geri gönderilebilmesi için müşteriye veri gönderiyor olmanızın yanı sıra, ayrıca değiştirilebilir.Sahiplik, oluşturma tarihi vb. Şeyler için düzenlenebilir olmayan alanlar kullanıyorum. –

+1

JW, 2 gizli giriş alanı brüt değil, ama çalışacağım sonraki görünümde daha fazla gizli girdi alanı olacak. Thats bu yöntemi sorgulamaya başladığımda. Bu bir iç uygulama ama James S de iyi bir noktaya sahip - bu alanlar ile oynanabilir. – shanabus

+0

Bunun en iyi çözüm olduğuna inanmakta tereddüt ederken, kullanacağım çözüm bu. – shanabus

2

Sen 2 özelliklerini görmezden Automapper söyleyebilir:

Mapper.CreateMap<Source, Destination>() 
.ForMember(dest => dest.SomeValuefff, opt => opt.Ignore()); 

Possible related question.

+0

modelime eşleştirdiğimde bu veriyi kullanıyorum, boş diziler yerine boş değerler alıyorum ve DateTime özellikleri varsayılan değerlerle geri geliyor. – shanabus

+1

Bunu geri alıyorum - eşlemeyi haritalamadan önce depodan yüklediğimde çözümünüz çalışır. Bu şekilde yok sayılan alanlar yeni yüklenen nesnenin üzerine yazmaz - sadece güncellemek istediğim alanlar olacaktır. Teşekkürler – shanabus

+1

Üzgünüm, bu cevabı reddettim çünkü ilk yorumumdan da bahsettiğim gibi, Ignore() özelliği 'özellikli' özelliğe neden oluyor. Yani, bir DateTime özelliğini yok saymak onu '01/01/0001 'gibi bir değere ayarlar ve bir dizgi özelliğini yok saymak onu "" null değerine ayarlar. – shanabus

0

Ayrıca AutoMapper.Map aşırı yükünü de kullanabilir ve TEntity'yi de kabul edebilir misiniz ?!

entity = Mapper.Map(viewmodel, entity); 

Görüntüleme modelinizdeki özelliklere sahip olmadığınız sürece, varlığınızdaki değerleri değiştirmez. Girilen öğeyi alır ve yalnızca viewmodel öğelerini tekrar kuruluşa uygular.