Set selected value in SelectList after instantiation


Question

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?

1
31
8/28/2009 7:10:02 AM

Accepted Answer

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).

19
5/31/2013 2:52:34 PM

I know it' an old question, but it might help someone out there. I did what looks to be closely like what Erik did. I just created a new SelectList from my existing one...

SelectList myList = GetMySelectList();
SelectListItem selected = myList.FirstOrDefault(x => x.Text.ToUpper().Contains("UNITED STATES"));
if (selected != null)
{
     myList = new SelectList(myList, "value", "text", selected.Value);
}

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon