2009-02-24 14 views
6

ile ASP seçeneğini varsayılan olarak nasıl ayarlayabilirim ASP MVC RC1 kullanıyorum.Html.DropDownList

Kullanmakta olduğum bir form, bu kodla birlikte koyduğum bir açılır liste içeriyor.

<%= Html.DropDownList("areaid", (SelectList)ViewData["AreaId"], "Select Area Id")%> 

hale Ancak, bu yüzden varsayılan olarak seçilmiş olarak İsterdim Ne

<select id="areaid" name="areaid"> 
    <option value="">Select Area Id</option> 
    <option value="1">Home</option> 
    ... 
</select> 

0 değeri varsa ve işaretlemek için Seç Alan Kimliği seçeneği için ise elde ediyoruz Diğer değerlerle tutarlıdır ve bir alanın zorunlu bir değer olarak seçilip seçilmediğini doğrulayabilirim. AreaId bir tamsayıdır; bu yüzden, şu anda açılır listeye dokunmadan formunu tıklattığımda, MVC "" nin bir tamsayı olmadığını ve bana bir bağlanma hatası verdiğini bildirir.

Önyükleme seçeneği için nasıl bir değer ayarlayabilirim ve sonra formda seçebilir miyim?

Teşekkürler Dan

cevap

21

Sana üç dört seçeneği var. İlk önce SelectList inizi oluştururken veya SelectItemList numaralandırılırken, seçenek etiketiniz ve varsayılan değer ile seçiminizi yapın. En üstte koymak, modelde başka bir değer zaten seçilmemişse onu varsayılan yapacaktır. İkinci olarak, seçenekleri oluşturmak için bir döngü kullanarak görünümde seç (ve seçenekleri) "elle" oluşturabilirsiniz. Yine modelde sağlanmadığı takdirde varsayılan seçiminizi önceden yapabilirsiniz. Üçüncü olarak, DropDownList uzantısını kullanın, ancak sayfa yüklendikten sonra javascript'i kullanarak ilk seçeneğin değerini değiştirin.

string.Empty kullanmak için kodlanmış olduğu için bir optionLabel öğesine bir değer atamak için DropDownList uzantısını kullanmak mümkün görünmüyor. Aşağıda, http://www.codeplex.com/aspnet'dan ilgili kod snippet'i verilmiştir.

// Make optionLabel the first item that gets rendered. 
    if (optionLabel != null) { 
     listItemBuilder.AppendLine(ListItemToOption(new SelectListItem() { Text = optionLabel, Value = String.Empty, Selected = false })); 
    } 

DÜZENLEME: Son olarak, en iyi yolu model null değeri alıp RequiredAttribute kullanarak gerekli olarak işaretlemek sahip olmaktır. Görünüm için bir varlık modelinden ziyade, görünüme özgü bir model kullanmanızı öneririm. Değer Null olduğundan, boş dize bir değer seçmeden geri gönderilirse iyi çalışır. Gerekli bir değer olarak ayarlanması, modelin doğrulanmasının, değerin gerekli olduğu uygun bir mesajla başarısız olmasına neden olur. Bu, DropdownList yardımcı programını olduğu gibi kullanmanıza olanak tanır.

public AreaViewModel 
{ 
    [Required] 
    public int? AreaId { get; set; } 

    public IEnumerable<SelectListItem> Areas { get; set; } 
    ... 
} 

@Html.DropDownListFor(model => model.AreaId, Model.Areas, "Select Area Id") 
+1

Teşekkür ederim. Şimdi bir liste nesnesi oluşturun, 0 dizininde 0 değeriyle bir varsayılan seçenek ekleyin ve bunu Html.DropDownList'e iletin. Bir muamele yapar. – Hmobius

+0

Bu bana da yardım etti! MVC 3 ile bile, varsayılan değer eklemek mümkün değildir:/ – LanFeusT

+0

@ LanFeusT - bu MVC3'ten çok önce cevaplandı. Bunu, model perspektifi ile ilgili daha iyi bir yöntem için güncelledim, özellikle de. MVC3 ile. – tvanfosson

3

MVC3 için, SelectList'in seçili değeri tanımlayabileceğiniz bir aşırı yükü vardır. Bu durumda

Function Create() As ViewResult 

     ViewBag.EmployeeId = New SelectList(db.Employees, "Id", "Name", 1) 

     Return View() 

    End Function 

, ben 1 istediğim varsayılan liste öğesinin kimliği olduğunu biliyor, ama muhtemelen sen geçen

+0

Bu harika çalışıyor. Dan'ın sorusuna cevap vermek istediğine inanıyorum: –

0

yerine sorgusu aracılığıyla varsayılan veya ne kadar tekne yüzer seçebilirsiniz Görünümdeki tanımdaki varsayılan öğe, Denetleyiciden Listenin 0 dizinindeki "Bölge Seç" verilerini ekleyebilirsiniz.

Bu şekilde Seç Alan veri Birden açılır menülere için aynı SelectList kullanmak istedi ve ben sadece yeni bir katma yüzden modelinde SelectList çoğaltmak istemedi 0.

0

bir indeks değerine sahiptir Bir değeri alan ve seçilen öğeyi ayarlayan Html Uzantısı yöntemi.

public static MvcHtmlString DropDownList(this HtmlHelper htmlHelper, string name, string value, IList<SelectListItem> selectList, object htmlAttributes) 
{ 
    IEnumerable<SelectListItem> items = selectList.Select(s => new SelectListItem {Text = s.Text, Value = s.Value, Selected = s.Value == value}); 
    return htmlHelper.DropDownList(name, items, null /* optionLabel */, htmlAttributes); 
} 
İlgili konular