我真的很讨厌,因为有很多与SelectedIndexChanged相关的类似问题没有解雇。但是,我无法想出这个。这是我的DDL:
<asp:DropDownList runat="server" ID="ddlPart1Country"
CssClass="form-control"
AutoPostBack="true"
OnSelectedIndexChanged="ddlPart1Country_SelectedIndexChanged" />
我有一个母版页设置EnableViewState =“True”,它还有我的ScriptManager和表单元素。真的,这里没什么特别的。像这样,SelectedIndexChanged将会正常启动。当被任何其他元素包装时,我的问题就出现了(例如:Panel,div等)。我的DDL将触发PostBack,但索引不会改变,因此不会触发SelectedIndexChanged事件。
因此,例如:
时不会改变索引<div class="row">
<div class="form-group">
<label for="ddlPart1Country" class="col-sm-3 control-label">Country<i class="required"></i></label>
<div class="col-sm-4">
<asp:DropDownList runat="server" ID="ddlPart1Country" CssClass="form-control" AutoPostBack="true" OnSelectedIndexChanged="ddlPart1Country_SelectedIndexChanged" />
</div>
</div>
</div>
相同的DDL控件,唯一的区别是它在div中的位置。
这是我的代码隐藏:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
FillPart1Countries();
}
protected void FillPart1Countries()
{
var lstOptions = CacheValues.Countries;
if (lstOptions == null)
{
return;
}
ddlPart1Country.Items.Add(new ListItem(" -- Select Your Country -- ", ""));
foreach (var option in lstOptions.Result)
{
ddlPart1Country.Items.Add(new ListItem(option.Ctry, option.GENC0));
}
}
protected void ddlPart1Country_SelectedIndexChanged(object sender, EventArgs e)
{
if (ddlPart1Country.SelectedItem.Value == "")
return;
var lstOptions = FormPopulation.GetStatesAndProvences(ddlPart1Country.SelectedItem.Value);
ddlPart1StateOrProvence.Items.Clear();
ddlPart1StateOrProvence.Items.Add(new ListItem(" -- Select Your State/Provence -- ", ""));
foreach (var option in lstOptions.Result)
{
ddlPart1StateOrProvence.Items.Add(new ListItem(option.Name, option.GENC1));
}
lblCountrySelected.Text = ddlPart1Country.SelectedItem.Text;
upnlPart1State.Update();
}
我没有在PostBack上重建DDL。 ViewState已启用。我知道它必须是我正在做或不做的蠢事,但我看不到它。我错过了什么?
答案 0 :(得分:0)
在考虑了这个之后,我想我可能已经修改了<div>
到<asp:Panel>
之前的类似内容。我不确定问题是什么,因为它通常可以正常工作。
答案 1 :(得分:0)
感谢Steve对CSS的看法,我也删除了我正在使用的脚本库。其中一个是我的客户端验证,那里有一行:
$.each($('div').children(), function() {
$(this).attr("name", $(this).attr("id"));
});
强制DOM将name属性重命名为ASP控件的ID。删除当然解决了这个问题。这就是我首先使用hack进行客户端验证的结果。感谢大家一起来看看。