我的asp:dropdown
定义如下:
<asp:Label ID="DropdownLabel1" runat="server">State Name</asp:Label>
<asp:DropDownList ID="statename" runat="server" AppendDataBoundItems="true" Width="600px" style= "top:100%;" Enabled ="false">
<asp:ListItem Text="" Value="" />
</asp:DropDownList>
我有一个按钮功能,定义如下:
<asp:Button ID="Savestate" runat="server" Text=" Save "
OnClick="SaveState_Click"></asp:Button>
单击此按钮,它将从服务器端(SaveState_Click
文件)调用函数.cs
我正在尝试将值绑定到dropdown
的{{1}}列表dictionary
。 getStateName
的键包含所有状态名称,因此使用它来绑定值。
填充功能:
getStateName
上面的填充下拉功能可以很好地工作,并将所有键值绑定到下拉列表,并按照我的预期选择正确的索引值。
但是当我再次单击该按钮时,按钮功能再次调用populate函数,statename.DataSource = getStateName.Keys;
statename.DataBind();
statename.SelectedIndex = statename.Items.IndexOf(statename.Items.FindByText(GetKeyFromValue(getStateName[1].Id)));
导致databind
值重复。有多少次,单击按钮,下拉值重复多次。
单击该按钮时,下拉列表中的值将被复制。最初有10个值,当我再次单击该按钮时,值会重复,现在它有20个值(每个值被填充两次),当我下次点击时,它有30个值(每个值被填充三次)
我看到一条帖子要包含dropdown
作为额外参数,当我这样做时,下拉值不会重复,但是当我尝试在.cs文件中获取它时,选定的下拉值会显示为空值。
我还在enableviewstate= "false"
之后看到另一篇帖子包含SecurityQuestion2.AppendDataBoundItems = false;
,但我无法成功
我在下面尝试过if语句并且也无法成功。
databind
如何在执行if (statename.Items.Count <= 1)
{
statename.DataSource = getStateName.Keys;
statename.DataBind();
}
时阻止此重复?
答案 0 :(得分:1)
像这样重写你的语句,调试它,看看哪个是创建问题。 注释这一行并将其分成几行:
statename.SelectedIndex = statename.Items.IndexOf(statename.Items.FindByText(GetKeyFromValue(getStateName[1].Id)));
更改为:
string text=statename.Items.FindByText(yourText);//Any value that exists within your dropdown just for testing purpose.
string id=getStateName[1].Id;//change string to int if its an int type
string value=GetKeyFromValue(getStateName[1].Id);
现在通过在第一行放置断点来检查这些临时创建变量的值,按F10并查看它们是否包含任何值,如果没有,则跟踪它们为什么没有给出预期结果。
虽然它不是解决方案,但它可以帮助您跟踪实际问题。
答案 1 :(得分:1)
protected void Page_Load(object sender, EventArgs e)
{
Dictionary<int, string> getStateName = new Dictionary<int, string>();
getStateName.Add(3,"New York");
getStateName.Add(2,"Chicago");
getStateName.Add(1,"Washington");
getStateName.Add(0,"Toronto");
statename.DataSource = getStateName;
statename.DataTextField = "Value";
statename.DataValueField = "Key";
}
和按钮点击事件
protected void SaveState_Click(object sender, EventArgs e)
{
statename.DataBind();
}
和....
<asp:DropDownList ID="statename" runat="server" AppendDataBoundItems="true"
Width="600px" style= "top:100%;"></asp:DropDownList>
答案 2 :(得分:0)
尝试使用enableViewstate =&#34; false&#34;它可以解决部分问题,使用该下拉列表。如果关闭ViewState,则不会再发生这种情况,因为在回发之间不会记住这些值。相反,每次都会从头开始填充DropDownList。