【问题标题】:DropdownList.selectedIndex always 0 (yes, I do have !isPostBack)DropdownList.selectedIndex 始终为 0(是的,我确实有!isPostBack)
【发布时间】:2010-09-23 16:29:16
【问题描述】:

(向下滚动到帖子底部以查找解决方案。)

有一个包含一个 asp.net 页面 数据列表。在这个数据列表中,有 是一个包含一个模板 下拉列表和每次 datalist 填充了一个项目,a 调用 ItemCreatedCommand。这 itemCreatedCommand 负责 数据绑定下拉列表。

我认为问题出在这 我正在使用 ItemCreatedCommand 来 填充它 - 但奇怪的事情 是如果我选择颜色“绿色”, 该页面将自动回发,我会 看到下拉菜单仍在 颜色为绿色,但在尝试使用时 它是 SelectedIndex,我总是得到 0...

protected void DataListProducts_ItemCreatedCommand(object
    source, DataListItemEventArgs e)

 var itemId = (String)DataListProducts.DataKeys[e.Item.ItemIndex];
 var item = itemBLL.GetFullItem(itemId); 

 var DropDownListColor = (DropDownList)e.Item.FindControl("DropDownListColor");

 //Also tried with :
 //if(!isPostBack) {

 DropDownListColor.DataSource = item.ColorList;
 DropDownList.Color.Databind();

 // } End !isPostBack)

    Label1.test = DropDownListColor.SelectedIndex.toString();
 // <- THIS IS ALWAYS 0! *grr* 

我已经缩小了代码范围 观看,但您仍然可以看到什么 我正在尝试做:) 的原因 为什么我这样做,而不是声明 颜色的数据源直接 我 aspx-page,是我需要运行一个 测试 if(showColors),但我不想要 用代码弄乱 html 页面 我觉得应该在代码中 落后文件。

编辑:尝试更改后 SelectedIndexChange - 我有一个 现在我脑子里出现“逻辑”混乱—— 我如何改变里面的元素 数据列表?因为,据我所知——我 没有任何方法可以检查哪个 数据列表中的项目 this 特定的下拉列表属于... 要么?我将尝试几种方法 看看我最终得到了什么;)但是做 请发表您对此的看法 问题:)

解决方案:

要么将事件冒泡到 ItemCommand,要么处理事件,获取发送者父级(这是一个 datalistItem 并在其中操作元素。

 protected void DropDownListColor_SelectedIndexChanged(object sender, EventArgs e)
        {
            DropDownList dropDownListColor = (DropDownList)sender;
            DataListItem dataListItem = (DataListItem)dropDownListColor.Parent;

            var item = items[dataListItem.ItemIndex];
            var color = item.ItemColor[dropDownListColor.SelectedIndex];

            var LabelPrice = (Label)dataListItem.FindControl("LabelPrice");
            LabelPrice.Text = color.Price; 
        }

【问题讨论】:

  • 您能否详细说明未将其添加到页面的原因?我不确定我理解正确。您说您不想弄乱 ASPX/HTML,但我认为没有理由将 DropDown 以不同的方式绑定?
  • 好吧,老实说,我想我会放弃“不要弄乱 html”文件,因为我已经搜索了好几个小时,而且似乎没有轻松实现我所需要的。但原因是要保持严格的代码和设计操作。 (现在我必须在 aspx 中添加一个 if-check)

标签: c# asp.net drop-down-menu postback


【解决方案1】:

DataList 绑定数据时,AutoPostBack 尚未处理,即 ItemCreated 事件中的值仍然是原始值。

您需要处理下拉控件的 SelectedIndexChange 事件。

【讨论】:

    【解决方案2】:

    关于你的第二个问题:

    我建议你从下拉列表中删除 AutoPostBack,添加一个“更新”按钮,并在按钮 Click 事件中更新数据。

    该按钮可以保存 Command 和 CommandArgument 值,因此很容易与数据库记录关联。

    【讨论】:

    • 但是你必须手动按下按钮才能填充下拉列表 - 因为我实际上有两个相互依赖的下拉列表,所以我首先需要填充一个,并基于第一个,我需要填充第二个。
    【解决方案3】:
    【解决方案4】:

    感谢您的解决方案

     protected void ddlOnSelectedIndexChanged(object sender, EventArgs e) {
         try {
             ModalPopupExtender1.Show();
             if (ViewState["Colors"] != null) {
                 FillColors(ViewState["Colors"].ToString());
             }
    
             DropDownList dropDownListColor = (DropDownList)sender;
             DataListItem dataListItem = (DataListItem)dropDownListColor.Parent;
    
             Image image = (Image)dataListItem.FindControl("mdlImage");
             Label ProductCode = (Label)dataListItem.FindControl("lblprdCode");
             Label ProductName = (Label)dataListItem.FindControl("lblProdName");
             DropDownList ddlQuantity = (DropDownList)dataListItem.FindControl("ddlQuantity");
             Label ProductPrice = (Label)dataListItem.FindControl("lblProdPrice");
             Label TotalPrice = (Label)dataListItem.FindControl("lblTotPrice");
             //Label ProductPrice = (Label)dataListItem.FindControl("lblProdPrice");
         } catch (Exception ex) {
    
         }
     }
    

    【讨论】:

      猜你喜欢
      • 2013-10-29
      • 1970-01-01
      • 2020-07-25
      • 1970-01-01
      • 2023-03-23
      • 2023-03-10
      • 2014-01-09
      • 1970-01-01
      • 2011-08-15
      相关资源
      最近更新 更多