何らかの理由で、ドロップダウン リストの初期値が設定されません。代わりに、常にランダムな値をロードします。マークアップを調べると、値が -1 のものを含むすべてのリスト項目が表示されます。また、ブラウザーのキャッシュをクリアし、コード内の SelectedIndex/Value を明示的に 0/"-1" に設定しようとしましたが、何が起こっているのかわかりません。何か案が?
これが私がやっている方法です:
<asp:DropDownList ID="ddlGender" runat="server" CssClass="select_Box" OnPreRender="LoadGenders">
</asp:DropDownList>
<div class="error">
<asp:RequiredFieldValidator
ID="RequiredFieldValidatorGender"
Runat="server"
Enabled="true"
InitialValue="-1"
ControlToValidate="ddlGender"
SetFocusOnError="true"
Display="Dynamic">Gender Required</asp:RequiredFieldValidator>
</div>
生成された HTML:
<select name="pagecolumns_0$pagecontent_1$contentleftcol_0$ctl00$ddlGender" id="pagecolumns_0_pagecontent_1_contentleftcol_0_ctl00_ddlGender" class="select_Box">
<option value="-1">--Select Gender--</option>
<option selected="selected" value="M">Male</option>
<option value="F">Female</option></select>
ご覧のとおり、男性をランダムに選択しています。また、前回フォームに入力したときに、送信する前に男性に設定したことに気付きました。選択をキャッシュしている可能性がありますか?
.cs は次のとおりです。
protected void LoadGenders(object sender, EventArgs e)
{
if (IsPostBack) return;
((DropDownList)sender).Items.AddRange(Constants.GenderWithSelect);
}
public static ListItem[] GenderWithSelect = (new[] { new ListItem("--Select Gender--", "-1") }).Concat(Gender).ToArray();
public static ListItem[] Gender = new[]
{
(new ListItem("Male","M")),
(new ListItem("Female","F"))
};