加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – DropDownList烦恼:相同的值不会触发事件

发布时间:2020-12-15 23:59:54 所属栏目:asp.Net 来源:网络整理
导读:我已经填充了一个具有不同文本属性的下拉列表控件,但每个文本属性都具有相同的值(文本属性为A,值属性为blah,文本属性为B,值属性为blahblah等…) ASP.net仅在回发时检查值属性,因为所有值都相同(for 测试原因)这个小烦人的行为发生了.有工作吗?这是否意味着
我已经填充了一个具有不同文本属性的下拉列表控件,但每个文本属性都具有相同的值(文本属性为A,值属性为blah,文本属性为B,值属性为blahblah等…)

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

解决方法

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

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

解决

好的,所以我开始挖掘这个因为我很好奇:)

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

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

复制:

ASPX

<asp:DropDownList ID="myDDL" runat="server" AutoPostBack="True">
    </asp:DropDownList>
    <asp:Label ID="lblSelItem" runat="server"Text="Currently Selected Item: 0"></asp:Label>
    <asp:Label ID="lblSelVal" runat="server" Text="Currently Selected Value: X"></asp:Label>

代码隐藏

List<string> MyData()
    {
        List<string> rtn = new List<string>();
        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时,我意识到我们需要为< option>显式设置“value”属性.服务器控件生成的元素,这使我做了类似的事情:

新代码背后

Dictionary<string,string> MyTwoColData()
    {
        Dictionary<string,string> rtn = new Dictionary<string,string>();
        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<string,string> data = MyTwoColData();

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

            myDDL.DataBind();
        }
    }

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

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

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

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

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

请享用!

PS:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读