【问题标题】:ASP.NET DropDownList error -- SelectedItem/Value never updatesASP.NET DropDownList 错误——SelectedItem/Value 永远不会更新
【发布时间】:2012-02-10 13:52:20
【问题描述】:

编辑:已解决。一次将 DataTable 绑定到 DDL 的尝试意外发生了两次,而未检查页面的 PostBack 状态。一旦删除了多余的绑定尝试,问题就消失了。感谢大家的帮助。

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

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

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

下面是设置 DDL 内容的代码: 私有 void 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/Value/Index 总是相同,即使在选定的索引更改事件处理程序中?

【问题讨论】:

  • 您是否在页面加载时调用`BindDDL()`。如果是,那么请将其放入 if(!postBack) 中。问候
  • @Hayer 是的,我刚刚尝试过并看到相同的行为。此外,似乎选择索引更改甚至没有触发。我肯定已经在 Page_Load 中连接了这个事件......真的很奇怪。
  • 贴出调用BindDDL的代码。
  • 尝试删除ddlLocationState_SelectedIndexChanged并在设计模式下双击下拉控件重新创建它。我希望它会起作用。

标签: c# asp.net .net


【解决方案1】:

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

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

【讨论】:

  • 感谢您的建议。我试过这个无济于事。我忘记提到的一件事是绑定 似乎 工作。 IE。 DDL 使用 DataTable“sdt”中的所有文本填充。
  • 毕竟就是这样。我不小心做了两次 DDL 的绑定,一次没有检查页面 PostBack 状态。这就是问题所在。一旦删除了绑定 DDL 的其他尝试,一切正常。谢谢!
【解决方案2】:

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

【讨论】:

  • 我尝试绑定 DDL 两次,一次没有检查回发状态。我删除了这段多余的代码,一切都很好。谢谢!
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-17
    • 2020-07-04
    相关资源
    最近更新 更多