2015-07-22 30 views
1

我有一种情况,我需要SelectedIndexChanged以编程方式选择项目时触发。这是我正在做的。设置选定的值不会触发SelectedIndexChanged

我对FormLoad从数据库装载一个下拉列表,我倒基于查询字符串传递这样的信息设置下降的值:

if (Request.QueryString["nat"] != null) 
{ 
    ddlTriggers.ClearSelection(); 
    ddlTriggers.Items.FindByValue(
      Request.QueryString["nat"].ToString()).Selected = true; 
} 

这不,因为它需要的正常工作来自查询字符串的id并将其匹配到下拉菜单中的特定项目。问题是仅仅通过设置.selected=true不会触发selectedIndexChanged事件。我试图在选定索引更改时设置一些标签。

一些建议表现出手动调用selectedIndexChanged这样的:

ddlCommonTasks_SelectedIndexChanged(ddlTriggers, EventArgs.Empty); 

但随后即重置selectedIndex和显示我在下降的第一个项目下降,这当然是犯规帮助我的任何标签。

有任何建议。

+0

你怎么样转移您将SelectedIndexChanged事件内部的代码执行到一个方法中,然后调用SelectedIndexChanged事件内部的方法以及以编程方式更改选择内容的方法的末尾? –

回答

1

问题是您正在更改post post上的选定索引k或在服务器上加载页面。该活动不会开火。你可以做的是采取的东西在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); 
} 
+0

不错的答案。这现在总是有意义的。我没有意识到,如果在回发时设置下拉不会触发selectedIndexChanged。我将更新代码并让您知道它是如何发生的! – logixologist

1

如果我正确地假设你已经为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(); 
} 
+0

但是,有趣的回答假设我正在使用jQuery。这是一个特定的C#问题。我从来没有注册我的处理程序,这可能是为什么它没有按预期工作。 – logixologist

相关问题