Ошибка SelectedValue при обратной передаче в DropDownList

Недавно я обнаружил странное поведение внутри ASP.NET DropDownList, которое, я надеюсь, кто-нибудь сможет объяснить.

В основном проблема, с которой я сталкиваюсь, заключается в том, что при привязке данных до обратной передачи, а затем при установке SelectedValueзначения, которого нет в списке элементов данных, вызов просто не имеет никакого эффекта. Однако при обратной передаче тот же вызов завершится с ошибкой ArgumentOutOfRangeException()

. 'cmbCountry' имеет SelectedValue, который является недопустимым, поскольку он не существует в списке элементов. Имя параметра :значение

Я использую следующий код.

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        cmbCountry.DataSource = GetCountries();
        cmbCountry.DataBind();

        cmbCountry.SelectedValue = ""; //No effect
    }
    else
    {
        cmbCountry.SelectedValue = ""; //ArgumentOutOfRangeException is thrown
    }
}

protected List<Country> GetCountries()
{
    List<Country> result = new List<Country>();

    result.Add(new Country() { ID = Guid.NewGuid(), Description = "Test" });
    result.Add(new Country() { ID = Guid.NewGuid(), Description = "Test1" });
    result.Add(new Country() { ID = Guid.NewGuid(), Description = "Test2" });
    result.Add(new Country() { ID = Guid.NewGuid(), Description = "Test3" });

    return result;
}

public class Country
{
    public Country() { }
    public Guid ID { get; set; }
    public string Description { get; set; }
}

Может ли кто-нибудь объяснить мне причину такого поведения и посоветовать, есть ли обходные пути?

6
задан Maxim Gershkovich 7 August 2012 в 00:16
поделиться