当前位置:  开发笔记 > 后端 > 正文

DropDownList烦恼:相同的值不会触发事件

如何解决《DropDownList烦恼:相同的值不会触发事件》经验,为你挑选了2个好方法。

我已经填充了一个具有不同文本属性的下拉列表控件,但每个文本属性都具有相同的值(文本属性为A,值属性为blah,文本属性为B,值属性为blahblah等...)

ASP.net仅在回发时检查值属性,因为所有值都相同(出于测试原因),这种令人讨厌的行为发生了.有工作吗?这是否意味着你不可能永远不会有相同的价值?



1> Rob Cooper..:

听起来你正在处理错误的事件.尝试SelectedIndexChanged.

确保您还将AutoPostBack属性设置为True.

解决

好的,所以我很好奇,因为我很好奇:)

使用非唯一值进行数据绑定时存在"问题".

所以,首先,我公开道歉说不然.

复制:

ASPX

    
    
    
    

代码隐藏

    List MyData()
    {
        List rtn = new List();
        rtn.Add("I am the same value!");
        rtn.Add("I am the same value!");
        rtn.Add("I am the same value!");
        rtn.Add("I am the same value!2");
        return rtn;
    }

    protected void Page_Init()
    {
        if (!Page.IsPostBack)
        {
            // Load the Data for the DDL.
            myDDL.DataSource = MyData();
            myDDL.DataBind();
        }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        // Display the Currently Selected Item/Value.
        lblSelItem.Text = "Currently Selected Item: " + myDDL.SelectedIndex.ToString();
        lblSelVal.Text = "Currently Selected Value: " + myDDL.SelectedValue;
    }

运行,更改DropDownList中的值.请注意,不会发生PostBack.

在查看Source时,我意识到我们需要为服务器控件生成value元素显式设置" "属性,这导致我执行以下操作:

新代码背后

    Dictionary MyTwoColData()
    {
        Dictionary rtn = new Dictionary();
        rtn.Add("1", "I am the same value!");
        rtn.Add("2", "I am the same value!");
        rtn.Add("3", "I am the same value!");
        return rtn;
    }

    protected void Page_Init()
    {
        if (!Page.IsPostBack)
        {
            // Load the Data for the DDL.
            Dictionary data = MyTwoColData();

            foreach (KeyValuePair pair in MyTwoColData())
            {
                myDDL.Items.Add(new ListItem(pair.Value, pair.Key));
            }

            myDDL.DataBind();
        }
    }

这个explcitly将值设置为"1","2","3"等使它们唯一,同时仍然在列表中显示正确的数据.

显然,您可以将其更改为使用单列列表,但只是运行for循环并使用值i或其他值.

至于DataSet的良好解决方法,不确定.

实际上,我们是否会向用户提供具有完全相同值的选项列表?

我个人认为不是,这可能是为什么这个"问题"没有得到解决:)

请享用!

PS:

哦,我还应该补充一点,如果你想在"修复"中使用文本值,那么将其更改为SelectedItem而不是SelectedValue.



2> Joseph Ander..:

ASP.NET无法区分下拉列表中具有相同值的不同项目,因为当浏览器发送HTTP POST时,它仅发送所选值.

ASP.NET将在下拉列表中找到第一个匹配值的项目.

您需要确保下拉列表中的每个项目都具有不同的值.您可以通过为每个值添加一个键来完成此操作.换句话说,不是每个值都有"blah",而是使用"blah-1","blah-2"等.

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有