当用户从下拉列表中选择一个值并单击该按钮时,该值将被添加到第二个列表(该列表也显示在屏幕上)。
问题是当用户点击按钮时,所选值被添加到第二个列表中,而下拉列表被复制并添加到原始下拉列表中。
所以我们在原始的下拉列表中有1,2,3,用户选择'1‘并按下按钮。“1”被添加到第二个列表并显示在屏幕上,但当用户单击下拉列表时,它现在包含2、3、1、2、3
Iv检查了我的带有断点的代码,我认为这与.dataSource有关。
protected void UpdatePage()
{
int Id = System.Convert.ToInt32(Id.Value);
List<Contractor> allContractors = new List<Contractor>();
ClarkeDBDataContext db = new ClarkeDBDataContext();
allSubContractors = (from BoqContractors in db.BOQ_Contractors
where BoqContractors.Bill_Of_Quantity_id == tempBoqId
select BoqContractors.Contractor).ToList();
repeaterShowContractorName.DataSource = allContractors;
repeaterShowContractorName.DataBind();
IEnumerable<Sub> availableContractors =
(from sc in db.Contractors
select sc).ToList().Except(allContractors);
//i've tried to set it to null to test it, but to no avail
DropDownListContractors.DataSource = null;
DropDownListContractors.DataSource = availableContractors;
DropDownListContractors.DataBind();
}发布于 2013-02-08 01:02:29
由于ViewState和回发,原始值存在于ddl中。ddl在回发时重新填充。这就是原始值存在的原因。
在这个用例中,我不确定为什么需要从数据库中重新获取数据。如果确实需要从数据库刷新列表,只需在设置DataSource之前调用DropDownListContractors.Clear()即可。这将清空列表。
但是,就像我之前说过的,我不认为你需要从db重新绑定ddl。只需从您的代码中删除以下代码行(当回发时),它就会像您所希望的那样工作:
IEnumerable<Sub> availableContractors =
(from sc in db.Contractors
select sc).ToList().Except(allContractors);
//i've tried to set it to null to test it, but to no avail
DropDownListContractors.DataSource = null;
DropDownListContractors.DataSource = availableContractors;
DropDownListContractors.DataBind();https://stackoverflow.com/questions/14756449
复制相似问题