System.Web.UI.WebControls.ListItems の Collections.Generic.List で asp:DropDownList を DataBind しようとしています。DataBind() がこのエラーをスローしています。
System.ArgumentOutOfRangeException: 'ddlPlatinumOptions' には、アイテムのリストに存在しないため無効な SelectedValue があります。
.ascx
<asp:DropDownList ID="ddlPlatinumOptions" runat="server" AutoPostBack="true" width="100%"></asp:DropDownList>
.ascx.cs
public void BindPlatinumOptions()
{
ddlPlatinumOptions.DataTextField = "Text";
ddlPlatinumOptions.DataValueField = "Value";
ddlPlatinumOptions.DataSource = _platinumOptions;
ddlPlatinumOptions.DataBind(); // Throwing Error
}
プレゼンター
MattressProtectionInfo standard = RF_ProtectionPlan.GetMattressPlanInfo(MattressId, false);
MattressProtectionInfo premium = RF_ProtectionPlan.GetMattressPlanInfo(MattressId, true);
List<ListItem> plans = new List<ListItem>();
if (standard != null)
{
plans.Add(new ListItem(standard.Price.ToString("C") + " - Standard 5-Year Platinum Protection", standard.ProductID.ToString()));
}
if (premium != null)
{
plans.Add(new ListItem(premium.Price.ToString("C") + " - Premium 5-Year Platinum Protection", premium.ProductID.ToString()));
}
_view.PlatinumOptions = plans;
_view.BindPlatinumOptions();
データ例
- 値 = "21696" テキスト = "$99.95 - 標準の 5 年間プラチナ プロテクション"
- 値 = "21702" テキスト = "$119.95 - プレミアム 5 年間プラチナ プロテクション"
私が試したこと
- 私のデータの前にデータソースとデータバインディングをヌルにして、何かをクリアします(dataBindでも壊れました)
- DataTextField と DataValueField の位置を再配置する (時間の無駄 - 変更なし)
- データバインドの前に、選択したインデックスを 0 と宣言する
- ddlPlatinumOptions.Items.Clear();
- ddlPlatinumOptions.ClearSelection();
ストローをつかんでいます。データバインドがドロップダウンリスト内にないものを選択しようとしているかのように見えます。
コードに表示されていないエラーがありますか? 何か案は?