2012-02-10 89 views
1

编辑:解决。尝试将DataTable绑定到DDL意外发生两次,而未检查页面的PostBack状态。一旦多余的尝试绑定被解决,问题就消失了。感谢大家的帮助。ASP.NET DropDownList错误 - SelectedItem/Value从不更新

我有一个aspx页面和该功能后面的一些代码一个下拉列表(ddlLocationState)或美国国家按字母顺序。但是,无论选择哪个项目,如果我执行ddlLocationState.SelectedItem/Value/Index,它总是“阿拉斯加”和“0”。每一次。即使在SelectedIndexChange事件处理程序中。

这里的地方的DDL在aspx页面中声明(这是它唯一的参考页面):

<tr> 
    <td>&nbsp;</td> 
    <td class="textBlue"><label>State: </label></td> 
    <td> 
     <asp:DropDownList runat="server" ID="ddlLocationState" style="width: 250px;"/> 
    </td> 
</tr> 

下面的代码,其中DDL的内容是设置了: 私人无效BindStates()

private void BindDDL() 
    { 
    //Get all state info: 
    // Populate a DataTable called "sdt" with two columns, name (a state) 
    // and "id" (a number from 0 to 49) 

    //Bind the DataTable "sdt": 
    this.ddlLocationState.DataSource = sdt; 
    this.ddlLocationState.DataTextField = "name"; 
    this.ddlLocationState.DataValueField = "id"; 
    this.ddlLocationState.DataBind(); 
    } 

下面是一些代码隐藏试图获得当前选择的值:

private void ddlLocationState_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    System.Diagnostics.Debug.WriteLine("on index changed: " + dlLocationState.SelectedItem.Value.ToString()); 
} 

这里就是BindDDL被称为:

protected void Page_Load(object sender, EventArgs e) 
     { 
     this.pnlLocationMaintenance.Visible = false; 
     this.LocationSortDirection = "asc"; 
     this.LocationSortField = "address"; 
     this.BindStates(); 
     this.dgLocations.CurrentPageIndex = 0; 
     this.BindLocations(); 

     if (!Page.IsPostBack) 
     { 
      BindDDL(); 
     } 
     ddlLocationState.SelectedIndexChanged += new EventHandler(ddlLocationState_SelectedIndexChanged); 
     } 

为什么ddlLocationState.SelectedItem /价值/指数总是相同,即使在选择指数变化的事件处理程序?

+1

你在调用'BindDDL()'frome页面加载。如果是,那么请把它放在if(!postBack)中。 Regards – Scorpion 2012-02-10 13:56:46

+0

@Hayer是的,我刚刚尝试过,看到相同的行为。此外,似乎选择索引更改甚至没有解雇。我确定在Page_Load中连线这个事件......真的很奇怪。 – kmarks2 2012-02-10 14:00:51

+0

发布BindDDL被调用的代码。 – 2012-02-10 14:02:16

回答

2

如果您在page_load上进行数据绑定而不检查是否处于回发状态,则会发生这种情况。这是我从你描述的症状的假设,这是发生了什么。

在你pageLoad的(...)方法,你需要: 如果(!Page.IsPostBack){ BindDDL(); }

+0

感谢您的建议。我试过这个无济于事。我忘记提到的一件事是绑定_seems_工作。即DDL填充DataTable“sdt”中的所有文本。 – kmarks2 2012-02-10 14:00:12

+0

毕竟这是它。我不小心做了两次DDL绑定,一次没有检查页面PostBack状态。这是问题所在。一旦另一个尝试绑定DDL被删除一切工作。谢谢! – kmarks2 2012-02-10 14:07:17

2

向我们展示您调用BindDDl()的代码。我的猜测是即使在回发时也调用BindDDl(),所以它重新填充列表并清除选择。

+0

刚发布。谢谢。 – kmarks2 2012-02-10 14:04:53

+0

我试图绑定DDL两次,而没有检查回发状态。我删除了这个冗余的代码,一切都很好。谢谢! – kmarks2 2012-02-10 14:08:15

2

您是否在page_load事件中调用BindDDL()方法?如果是的话,你应该检查请求是否不是回发