由于某种原因,下拉列表的初始值未设置。它总是加载一些随机值。当我查看标记时,我可以看到所有列表项,包括具有-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>
如你所见,它随机选择了男性。 Alsow,我注意到,上次填写表格时我将其设置为男性,然后再提交。可能是它缓存选择?
这是.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"))
};
答案 0 :(得分:1)
我尝试了你的代码,看来生成的html没有绑定到select选项“value”的正确字段。
您必须获得以下格式:
<select name="ctl00$MainContent$ddlGender" id="MainContent_ddlGender" class="select_Box">
<option selected="selected" value="-1">not set</option>
<option value="0">0</option>
<option value="1">1</option>
</select>
为了拥有这个,我必须设置DropDownList的DataValueField:
<asp:DropDownList ID="ddlGender" runat="server" CssClass="select_Box" OnPreRender="ddlGender_PreRender" DataValueField="Value" DataTextField="Text">
(只需将DataTextField和DataValueField替换为您的类的属性名称)
答案 1 :(得分:0)
事实证明它与控件的加载顺序有关。因此,将选定索引添加到LoadGenders就可以了。
protected void LoadGenders(object sender, EventArgs e)
{
if (IsPostBack) return;
((DropDownList)sender).Items.AddRange(Constants.GenderWithSelect);
((DropDownList) sender).SelectedIndex = 0;
}