2011-06-12 7 views
6

İki sınıfım var, KDV ve Ürün. Ürünün bir IVat özelliği vardır. Bir Ürün oluştururken/düzenlerken tüm Vat nesnelerinin bir açılır listesini görüntülemek için MVC'de editör şablonları kullanmaya çalışıyorum. Sevgili hayatım için bu çalışmayı başaramıyorum.Karmaşık türler için MVC3'teki editortemplates'leri nasıl kullanırım?

Açılır pencereyi görüntüleyen aşağıdaki kod var ancak form gönderildiğinde Ürün için KDV'yi ayarlamıyor.

Denetleyici:

IList<IVatRate> vatRates = SqlDataRepository.VatRates.Data.GetAllResults(); 
ViewBag.VatRates = new SelectList(vatRates, "Id", "Description"); 

Add.cshtml

@Html.EditorFor(model => model.VatRate.Id, "VatSelector", (SelectList)ViewBag.VatRates) 

VatSelector.cshtml

@model SelectList 
@Html.DropDownList(
     String.Empty /* */, 
      (SelectList)ViewBag.Suppliers, 
     Model 
    ) 

kimse bu konuda biraz ışık tutmak ve hatta bana gelin eğer minnettar olurum İnternette iyi bir örnek ... Bir kaç günlüğüne bununla takıldım.

cevap

7

Güçlü yazılan görünümler kullanır ve ViewBag'dan ziyade işleri çok daha kolay hale getirdiği için modelleri görüntüleyin.

Yani bir görünüm modeli ile başlamak:

public class VatRateViewModel 
{ 
    public string SelectedVatRateId { get; set; } 
    public IEnumerable<IVatRate> Rates { get; set; } 
} 

sonra kontrolör:

Görünüm
public class HomeController: Controller 
{ 
    public ActionResult Index() 
    { 
     var model = new VatRateViewModel 
     { 
      Rates = SqlDataRepository.VatRates.Data.GetAllResults() 
     }; 
     return View(model); 
    } 

    [HttpPost] 
    public ActionResult Index(VatRateViewModel model) 
    { 
     // model.SelectedVatRateId will contain the selected vat rate id 
     ... 
    } 
} 

:

@model VatRateViewModel 
@using (Html.BeginForm()) 
{ 
    @Html.DropDownListFor(
     x => x.SelectedVatRateId, 
     new SelectList(Model.Rates, "Id", "Description") 
    ) 
    <input type="submit" value="OK" /> 
} 

Ve VatRateViewModel için editör şablonu kullanmak istiyorsa ~/Views/Shared/EditorTemplates/VatRateViewModel.cshtml:

numaralı telefon numaralarından birini tanımlayabilir 10
@model VatRateViewModel 
@Html.DropDownListFor(
    x => x.SelectedVatRateId, 
    new SelectList(Model.Rates, "Id", "Description") 
) 

ve türünde bir özelliği vardır her yerde o VatRateViewModel sadece olabilir: İlgili editör şablonu kılacak

@Html.EditorFor(x => x.SomePropertyOfTypeVatRateViewModel) 

.

+0

Cevabınız için teşekkürler. Editortemplate ayrı bir denetleyiciye sahip mi? Öyle olmazsa, Ürünümün değerleri nasıl belirlenir ve eğer yaparsa, nereye gider ve ne denir? Bunu daha önce denedim ve işe alamadım. – Pieter

+0

Tamam, çok kan, ter ve gözyaşları SONRA NEDEN ayrıldı. Tüm karmaşık türlerimi, ürünümün yanı sıra ViewModel'e eklemeliydim. Tekrar teşekkürler! – Pieter