【发布时间】:2017-01-28 22:35:06
【问题描述】:
我有一个DropDownList 我想监督对选择的任何更改,所以我订阅了SelectedIndexChanged 事件,如下所示:
<asp:DropDownList ID="ddl" runat="server" OnSelectedIndexChanged="ddl_SelectedIndexChanged" DataSource='<%# new string[] { "1", "2", "3" } %>' />
<asp:Button ID="b" runat="server" OnClick="b_Click" Text="Test" />
如果我更改选择并单击按钮,它将跳转到我的SelectedIndexChanged 事件中。但是,如果我通过设置DropDownList 的SelectedValue 属性来更改代码隐藏中的选择,则不会触发该事件。这是我的代码来说明问题:
protected void Page_Load(object sender, EventArgs e)
{
if (!this.Page.IsPostBack)
{
this.ddl.DataBind();
}
}
protected void b_Click(object sender, EventArgs e)
{
this.ddl.SelectedValue = "2";
}
protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
{
Console.WriteLine("Breakpoint here");
}
我也尝试使用TextChanged 事件作弊,但问题是一样的。然后我尝试设置DropDownList 的SelectedIndex 属性并感到震惊,因为即使这样也行不通。
为什么 SelectedValue 或 SelectedIndex 在代码隐藏中被更改时不会触发任何更改事件?
我该如何克服这个问题?
【问题讨论】:
-
在分配
ddl.ddl_SelectedIndexChanged(null, null)后执行此操作;它不是自动的c -
@techspider 谢谢,是的,我知道我可以手动调用任何事件订阅,但这很脏,在设置
SelectedValue时需要考虑它,总是。有没有更清洁的方法来解决这个问题? -
我尝试使用您的代码,但您的下拉列表的数据源不起作用。不想循环或手动将它们添加到 DropDownList.Items 中?
-
@CurseStacker 是的,要绑定它,你必须先调用
DataBind。我更改了我的问题以提供一个工作代码示例。