Düzenleyici Şablonu dinamik bir özellik ile çalışmak için çalışıyoruz - hiçbir boşuna. Belki biriniz bize yardım edebilir.Asp.Net MVC 3 Dinamik özellik için düzenleme
public class Criterion
{
...
public string Text { get; set; }
public dynamic Value { get; set; }
public Type Type { get; set; }
...
}
Bizim jilet görünümü her İçinde kriterler listesini içeren bölümlerinin bir listesini containg bir model alır: Burada
kabaca bizim sınıftır. (Biz zamanında bu infos olsun.) Bütün bu kriterler düzenleme modunda görüntülenmesi gereken - gerçek tipine ilişkin: (alıntı)
@for (int i = 0; i < model.Sections.Count(); i++)
{
for (int j = 0; j < model.Sections[i].Criteria.Count(); j++)
{
var criterion = model.Sections[i].Criteria[j];
var type = criterion.Type.Name;
var name = "Sections[" + i + "].Criteria[" + j + "].Value";
var criterionDisplayName = criterion.Text;
<label for="[email protected](i)[email protected](j)__Value">@criterionDisplayName</label>
@Html.Editor(name, type)
}
}
Bu, örneğin ekran bir onay kutusu doğru, ama bu değeri kullanmaz gelmez onay kutusu durumunu doğru olarak ayarlamak için (ölçüt.Value doğruysa işaretliyse). Aynı şey ints
gibi diğer türler için de geçerlidir. (POST isteğinden sonra formu doğru bir şekilde doldurur, ancak bunun nedeni MVC'nin kullanıcı girdisini yeniden oluşturmak için geçici bir model kullanmasıdır.)
Denediğimiz ve araştırdığımız kadar: Düzenleyicisi kullanmak bile mümkün mü? tip dynamic
özellikli şablon? Eğer evetse - nasıl çalışırız? (Biz olası türüne göre ayırt etmek istemeyiz. Biz gerçek tipine göre doğru Editor şablonunu kullanmak için MVC framework olması istiyorum.)
Güçlü yazılan görünümle çalışır.Dizin Görünümünü güçlü yazılan görünümü kullanmamak için değiştirmeyi denedim: Silindi 'lodel IList' ve '@ {var model = (IList ) Modeli; } '. Sonra @ Html.Editor ("model [" + i + "] .Value", "Criterion_" + model [i] .Value.GetType(). Name) 'ı deneyin, ama bana bir hata verir - _The model Sözlüğe aktarılan öğe boştur, ancak bu sözlük 'System.Int32' türünde boş olmayan bir model öğesi gerektirir. Ne yanlış yapıyorum? Hata ayıklama bana GetType() adını gösterir. –
toni
Bu arada, güçlü bir şekilde yazılmamış görünümü kullanmamız gerekiyor çünkü üçüncü parti bir çerçeve kullanıyoruz (Orchard'dan ContentShape). – toni
Yukarıdaki gibi Darins yaklaşımını 'object' ile bitirdik. Dinamik ViewModel'i yayınlamak ve güçlü bir şekilde yazılmış bir editör şablonuna aktarmak zorunda kaldık. Teşekkürler, Darin, değerli girdiler için. – toni