2012-08-24 20 views
8

yüzden aşağıdaki (sözde kod) sahip öğeleri ile doldurdu ve zaten seçilmiş olan öğeyi işaretledi. ancak görünüme geldiğinde, seçeneklerin hiçbiri seçili olarak işaretlenmez.mvc C# Html.DropDownList ve viewbag

Sorum şu soruları cevaplamak için bir viewbag kullanmak mümkün mü yoksa başka bir ortam mı kullanmalıyım? Bu şekilde kullanırsam seçilen bayrak seçeneklerini kaldırır. Böyle

+0

Denetleyicinizde sınırsızlık yapabilir ve en az bir '' 'listenin' '' işaretli olarak işaretlendiğini kontrol edebilirsiniz Sel Selected = true; '? ViewBag'ın listenizi karıştırdığını sanmıyorum. – StuartLC

+0

evet bunu yaptım ve doğru seçeneği işaretliyor. – gdubs

cevap

21

Dene:

ViewBag.ListOfCodes = new SelectList(mymodelinstance.Codes, "Id", "Name"); 
ViewBag.Codes = "C"; 

ve görünümde: Bunun için

<%= Html.DropDownList(
    "Codes", 
    (IEnumerable<SelectListItem>)ViewBag.ListOfCodes, 
    new { style = "max-width: 600px;" } 
) %> 

böyle, koleksiyonunuza iç Kimliği = "C" ile bir öğe olması gerekir açıkçası sizi işe:

ViewBag.ListOfCodes = new SelectList(new[] 
    { 
     new { Id = "A", Name = "Code A" }, 
     new { Id = "B", Name = "Code B" }, 
     new { Id = "C", Name = "Code C" }, 
    }, "Id", "Name"); 
+0

Bu bölüm hangi "Kod C" seçer? – gdubs

+1

Bu bir: 'ViewBag.Codes =" C ";'. Ve görünüşte, 'DropDownList' yardımcısına ilk argüman olarak Kodları kullandınız çünkü ViewBag'dan değeri seçecektir. Görünüşe göre, bir model ve güçlü bir "DropDownListFor" yardımcısı kullandıysanız ve her zaman insanlara önerdiğim ViewBag'ı unutursanız, işler milyonlarca kez daha net olabilirdi. –

+0

Kabul ediyorum, bunu da yaparım. ancak bu senaryoda, bu listeden gelen değer, örneğe yazılacak olan başka bir açılır listenin başka bir değerine eklenecektir. Keşke farklı modellenmiş olsaydı .. – gdubs