DropDownList 的 SelectedIndexChanged 事件调用所有事件

DropDownList's SelectedIndexChanged event calls all events

我正在使用 Asp .Net Web 表单。我有 2 个下拉列表和 1 个输入字段。我希望当我更改下拉列表中的项目或字段值时调用某个事件,但它会调用所有事件。

例如,如果我改变尺寸,它会调用 Size_SelectedIndexChanged,然后是 Color_SelectedIndexChanged,然后是 txtKolicina_TextChanged 如果我改变颜色,它会调用 Color_SelectedIndexChanged,而不是 Size_SelectedIndexChanged,然后是 txtKolicina_TextChanged。

有什么帮助吗?

    <asp:DropDownList ID="Colors" runat="server" AutoPostBack="true" CssClass="form-control detal-page-input" Style="height: 30px;" OnSelectedIndexChanged="Colors_SelectedIndexChanged" AppendDataBoundItems="True" DataSourceID="LinqDataSource3" DataTextField="color" DataValueField="color" >
                                                <asp:ListItem Text="" Value=""></asp:ListItem>
                                            </asp:DropDownList>

<asp:DropDownList ID="Size" runat="server" OnSelectedIndexChanged="Size_SelectedIndexChanged" AppendDataBoundItems="true" AutoPostBack="true" CssClass="form-control detal-page-input" Style="height: 30px;" DataSourceID="LinqDataSource2" DataTextField="size" DataValueField="size" EnableViewState="true">
                                                <asp:ListItem Text="" Value=""></asp:ListItem>
                                            </asp:DropDownList>


     <asp:TextBox Name="txtKolicina" ID="txtKolicina" runat="server" CssClass="form-control form-numberone detal-page-input" OnTextChanged="txtKolicina_TextChanged" ></asp:TextBox>

这是后端

   protected void Size_SelectedIndexChanged(object sender, EventArgs e)
    {
//do something
}
    protected void Colors_SelectedIndexChanged(object sender, EventArgs e)
    {
//do something
}
 protected void txtKolicina_TextChanged(object sender, EventArgs e)
    {  
//do something
}

更新

public string[] GetColor()
{
    CMS_Shop_ModuleDataContext db = new CMS_Shop_ModuleDataContext();
    var color = (from p in db.CMS_Articles
        where
            p.articleID == int.Parse(HiddenFieldArticalId.Value) ||
            p.sameAsArticleID == int.Parse(HiddenFieldArticalId.Value)
        //where p.articleID == 10049 || p.sameAsArticleID == 10049
        select p.color).Distinct();
    return color.ToArray();
}
public int GetColorCount()
{
    CMS_Shop_ModuleDataContext db = new CMS_Shop_ModuleDataContext();
    var color = (from p in db.CMS_Articles
        where (p.articleID == int.Parse(HiddenFieldArticalId.Value)
               || p.sameAsArticleID == int.Parse(HiddenFieldArticalId.Value))
              && p.color != ""
        select p.color);

    return color.Distinct().Count();

}
 protected void Page_Load(object sender, EventArgs e)
{

    if (!Page.IsPostBack)
    {
 if (GetColorCount() == 0)
        {

            Colors.Visible = false;
            lblBoja.Visible = false;

        }
        else
        {
            Colors.Visible = true;
            lblBoja.Visible = true;



        }

看起来您使用了视图状态并在回发后的代码中重新填充了您的 DropDownLists。你能展示 OnInit 和 OnLoad 吗?

或者试试这个代码:

if (!IsPostBack) {
    // populate all drop downs lists
}

好的,我找到了问题所在。 一个变化

EnableViewState="false"

  EnableViewState="true"