最近、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; }
}
誰かが私のためにこの動作の原因を明確にし、回避策があるかどうかアドバイスしてもらえますか?