Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net DropDownList烦恼:获得相同的值';t触发事件_Asp.net - Fatal编程技术网

Asp.net DropDownList烦恼:获得相同的值';t触发事件

Asp.net DropDownList烦恼:获得相同的值';t触发事件,asp.net,Asp.net,我用不同的文本属性填充了dropdownlist控件,但每个文本属性都有相同的值(文本属性是a,值属性是blah,文本属性是B,值属性是blahblah,等等) ASP.net仅在回发时检查值属性,因为所有值都相同(对于 测试原因)发生了这种令人讨厌的行为。附近有工作吗?这是否意味着你永远不能拥有相同的价值 听起来你在处理错误的事件。试试看 确保还将AutoPostBack属性设置为True 断然的 好吧,既然我很好奇,我就开始研究这个:) 使用非唯一值进行数据绑定时存在“问题”。 因此,首先,

我用不同的文本属性填充了dropdownlist控件,但每个文本属性都有相同的值(文本属性是a,值属性是blah,文本属性是B,值属性是blahblah,等等)

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

听起来你在处理错误的事件。试试看

确保还将
AutoPostBack
属性设置为
True

断然的 好吧,既然我很好奇,我就开始研究这个:)

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

因此,首先,我公开道歉,我不这么说

复制:

ASPX 这明确地将值设置为“1”、“2”、“3”等,使其唯一,同时仍在列表中显示正确的数据

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

至于数据集的良好解决方案,还不确定

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

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

享受吧

附言:
哦,我还应该补充一点,如果你想在“fix”中使用文本值,那么将其更改为
SelectedItem
,而不是
SelectedValue
,,问题是如果所选索引没有更改,回发将不会触发。在用户进行相同选择的情况下,所选索引不会更改


很抱歉,这没有回答问题,但据我所知,它确实解释了行为。

由于dropdownlist控件中的所有listitem值都相同,因此SelectedIndexChanged甚至不会触发。我用谷歌搜索了一下。这似乎是常见的问题。我还没有找到任何解决方法。

您可以使用如下值:

1:2

2:2

3:2

其中第二个数字是“真实”值。然后您的事件应该触发,您可以解析出代码中的“真实”值


为什么会有一个所有值都相同的下拉列表?或者只是其中一些内容相同?

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

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


您需要确保下拉列表中的每个项都有一个不同的值。可以通过为每个值添加一个键来实现这一点。换句话说,不是每个值都有“blah”,而是使用“blah-1”、“blah-2”等。

如果您回想ASP.Net之前的日子,那么从
提交表单时发送的唯一内容是
值。然后,ASP.Net通过在数据项列表中查找该值,有效地计算出选择了哪个项

您还将注意到,如果您有两个具有相同值但不同标签的项目,那么如果您在下次表单加载时触发回发,则将显示第一个项目,即使您在执行回发之前选择了第二个项目


如果你退一步考虑原始数据源,如果所有的值都是值,你将如何识别哪个文本值被选中?如何从数据库或列表中选择该值?如何更新数据库中的该行?如果您尝试它,您会发现.Net抛出异常,因为它无法唯一标识该行


因此,您需要为数据添加唯一的密钥。

这并不完全正确。如果用户选择不同的项目,则SelectedIndex将更改(无论显示的值如何)。然后,AutoPostback确保在项目更改时执行回发,确保ViewState反映当前选定的项目。阅读整个问题到此为止!我没有看到他说他们都有相同的文本的部分。我的anwer假设选择了相同的项目。结果表明,如果值相同,则不会发生回发,无论索引如何!经验教训(尽管我可能永远不会显示相同的值!)。它甚至不会触发SelectedIndexChanged事件。我已将自动回邮设置为true。这是因为没有设置。回发仅在值不同时有效。解决此问题的唯一方法是“强制”用户重置DropDownList,方法是在DropDownList旁边放置一个按钮或其他控件,并使用其自己的ClickEvent()重置控件,这将强制回发。或者使用OnClientClick()和一些javascript重置控件。相同的东西我在两个不同的网页中有两个相同的下拉列表,它们从相同的数据源读取和填充,它们都有相同的值,但文本不同。此问题仅出现在一个网页中!!!怎么会?
    <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;
    }
    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();
        }
    }