【发布时间】: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