Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Set selected value in SelectList after instantiation

Am I right to think that there is no way to set the selected value in the C# class SelectList after it is created? Isn't that a bit silly?

like image 220
Boris Callens Avatar asked Nov 19 '08 13:11

Boris Callens


People also ask

What is IEnumerable SelectListItem?

SelectList(IEnumerable) Initializes a new instance of the SelectList class by using the specified items for the list. SelectList(IEnumerable, Object) Initializes a new instance of the SelectList class by using the specified items for the list and a selected value. SelectList(IEnumerable, Object, IEnumerable)

What is selected value in DropDownList?

Cause SelectedValue will give you the value stored for current selected item in your dropdown and SelectedItem. Value will be Value of the currently selected item.


1 Answers

I think you are fighting the framework. The data going into your views should be created at the Last Possible Minute (LPM).

Thinking this way, a SelectList is a type to feed the DropDownList HTML helper. It is NOT a place to store data while you decide how to process it.

A better solution would be to retrieve your data into a List<T> and then initialize the SelectList(s) when you need to. An immediate benefit of this practice is that it allows you to reuse your List<T> for more than one DropDownList, such as:

Country of birth Country of residence 

These SelectLists all use the Countries list of type List<Country>.

You can use your List<T> at the 'last minute' like in this example:

public class TaxCheatsFormViewModel {     private List<Country> countries { get; set; }      public TaxCheat Cheat { get; private set; }     public SelectList CountryOfBirth { get; private set; }     public SelectList CountryOfResidence { get; private set; }     public SelectList CountryOfDomicile { get; private set; }      public TaxCheatsFormViewModel(TaxCheat baddie)     {         TaxCheat = baddie;         countries = TaxCheatRepository.GetList<Country>();         CountryOfBirth = new SelectList(countries, baddie.COB);         CountryOfResidence = new SelectList(countries, baddie.COR);         CountryOfDomicile = new SelectList(countries, baddie.COD);     } } 

The point being that you should keep your data in a List<T> till you really need to output it; the last possible minute (LPM).

like image 143
awrigley Avatar answered Sep 28 '22 22:09

awrigley