设置选定值不会触发 SelectedIndexChanged
Setting selected value does not trigger SelectedIndexChanged
我有一种情况,当我以编程方式 select 一个项目时,我需要 SelectedIndexChanged
来触发。这就是我正在做的。
我从 FormLoad
上的数据库加载了一个下拉列表,我正在根据查询字符串中传递的信息设置下拉列表的值,如下所示:
if (Request.QueryString["nat"] != null)
{
ddlTriggers.ClearSelection();
ddlTriggers.Items.FindByValue(
Request.QueryString["nat"].ToString()).Selected = true;
}
这确实工作正常,因为它从查询字符串中获取 id 并将其与下拉列表中的特定项目相匹配。问题是仅通过设置 .selected=true
不会触发 selectedIndexChanged
事件。当 selected 索引更改时,我试图设置一些标签。
一些建议显示像这样手动调用 selectedIndexChanged
:
ddlCommonTasks_SelectedIndexChanged(ddlTriggers, EventArgs.Empty);
但是这会重置 selectedIndex
并向我显示下拉列表中第一项的标签,这当然对我没有任何帮助。
任何建议。
如果我假设您已经为 selectedIndexChanged 事件注册了一个处理程序,那么您可以简单地调用您注册为事件处理程序的同一函数。
如果您已经像这样注册了您的处理程序:
$( ".target" ).change(function() {
alert( "Handler for .change() called." );
});
您可以在别处定义您的函数,然后传递:
function handler() {
alert( "Handler for .change() called." );
}
$(".target").change(handler);
现在,在您现有的代码中只需调用您的处理函数:
if (Request.QueryString["nat"] != null)
{
ddlTriggers.ClearSelection();
ddlTriggers.Items.FindByValue(Request.QueryString["nat"].ToString()).Selected = true;
handler();
}
问题是您要在 post 上或在服务器上加载页面时更改选定的索引。该事件不会触发。您可以做的是在 SelectedIndexChanged
处理程序中获取内容并将其重构为单独的方法,可以在您更新值时调用该方法,例如:
ddlCommonTasks_SelectedIndexChanged(object sender, EventArgs e)
{
var ddl = sender as DropDownList;
PerformIndexChangedAction(ddl);
}
private void PerformIndexChangedAction(DropDownList ddl)
{
lblTest.Text=ddl.SelectedItem.Text;
}
修改代码如下:
var nat = Request.QueryString["nat"];
if (!String.IsNullOrWhitespace(nat))
{
ddlTriggers.ClearSelection();
ddlTriggers.Items.FindByValue(nat).Selected = true;
PerformIndexChangedAction(ddlTriggers);
}
我有一种情况,当我以编程方式 select 一个项目时,我需要 SelectedIndexChanged
来触发。这就是我正在做的。
我从 FormLoad
上的数据库加载了一个下拉列表,我正在根据查询字符串中传递的信息设置下拉列表的值,如下所示:
if (Request.QueryString["nat"] != null)
{
ddlTriggers.ClearSelection();
ddlTriggers.Items.FindByValue(
Request.QueryString["nat"].ToString()).Selected = true;
}
这确实工作正常,因为它从查询字符串中获取 id 并将其与下拉列表中的特定项目相匹配。问题是仅通过设置 .selected=true
不会触发 selectedIndexChanged
事件。当 selected 索引更改时,我试图设置一些标签。
一些建议显示像这样手动调用 selectedIndexChanged
:
ddlCommonTasks_SelectedIndexChanged(ddlTriggers, EventArgs.Empty);
但是这会重置 selectedIndex
并向我显示下拉列表中第一项的标签,这当然对我没有任何帮助。
任何建议。
如果我假设您已经为 selectedIndexChanged 事件注册了一个处理程序,那么您可以简单地调用您注册为事件处理程序的同一函数。
如果您已经像这样注册了您的处理程序:
$( ".target" ).change(function() {
alert( "Handler for .change() called." );
});
您可以在别处定义您的函数,然后传递:
function handler() {
alert( "Handler for .change() called." );
}
$(".target").change(handler);
现在,在您现有的代码中只需调用您的处理函数:
if (Request.QueryString["nat"] != null)
{
ddlTriggers.ClearSelection();
ddlTriggers.Items.FindByValue(Request.QueryString["nat"].ToString()).Selected = true;
handler();
}
问题是您要在 post 上或在服务器上加载页面时更改选定的索引。该事件不会触发。您可以做的是在 SelectedIndexChanged
处理程序中获取内容并将其重构为单独的方法,可以在您更新值时调用该方法,例如:
ddlCommonTasks_SelectedIndexChanged(object sender, EventArgs e)
{
var ddl = sender as DropDownList;
PerformIndexChangedAction(ddl);
}
private void PerformIndexChangedAction(DropDownList ddl)
{
lblTest.Text=ddl.SelectedItem.Text;
}
修改代码如下:
var nat = Request.QueryString["nat"];
if (!String.IsNullOrWhitespace(nat))
{
ddlTriggers.ClearSelection();
ddlTriggers.Items.FindByValue(nat).Selected = true;
PerformIndexChangedAction(ddlTriggers);
}