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

我已经填充了一个具有不同文本属性的下拉列表控件,但每个文本属性都具有相同的值(文本属性为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.

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....