ASP:下拉列表在数据绑定时按钮单击时产生重复值

时间:2017-03-28 03:52:24

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

我的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}}列表dictionarygetStateName的键包含所有状态名称,因此使用它来绑定值。

填充功能:

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(); } 时阻止此重复?

3 个答案:

答案 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。