событие checkboxlist selectedindexchanged С# не работает

У меня есть список флажков на моей странице asp.net. Я заполняю его странами. Я добавил событие "SelectedIndexChanged", которое должно проверять, что, если одна из выбранных стран является Африкой, оно должно сделать текстовое поле видимым, иначе visible=false, если оно не выбрано. Я изменил AutoPostback на true. Но проблема, с которой я сталкиваюсь, заключается в том, что он не выполняет автопостбэк (он вообще не входит в метод). Может ли кто-нибудь помочь мне в этом?

Вот что я сделал:

     <div id="div1" style="overflow-x:auto; width:100%; max-width:100%; height:150px; max-height:150px;" runat="server">
      <asp:CheckBoxList ID="lstLocations" CssClass="CheckBoxList" runat="server" Width="40%" Height="100%" AutoPostBack="True" OnSelectedIndexChanged="lstLocations_SelectedIndexChanged" >
      </asp:CheckBoxList>
     </div>

Заполнение списка флажков:

     private void CreateRegionList()
    {
        lstLocations.Items.Clear();

        cn = new SqlConnection(GetConnectionString());
        SqlCommand myCmd = new SqlCommand("SELECT ID, Region FROM CanonSALeads_Region ORDER BY Region", cn);
        cn.Open();
        SqlDataReader myReader = myCmd.ExecuteReader();

        lstLocations.AutoPostBack = false;
        lstLocations.CellPadding = 5;
        lstLocations.CellSpacing = 5;
        lstLocations.RepeatColumns = 1;
        lstLocations.RepeatDirection = RepeatDirection.Vertical;
        lstLocations.RepeatLayout = RepeatLayout.Flow;
        lstLocations.TextAlign = TextAlign.Right;
        lstLocations.CssClass = "CheckBoxList";

        if (myReader.HasRows)
        {
            while (myReader.Read())
            {
                CheckBox cb = new CheckBox();
                cb.ID = myReader[0].ToString();
                cb.Text = myReader[1].ToString();
                cb.AutoPostBack = false;
                cb.CssClass = "CheckBox";

                lstLocations.Items.Add(new ListItem(myReader[1].ToString(), myReader[0].ToString()));
                lstLocations.Controls.Add(new LiteralControl("<br>"));
            }
        }
        cn.Close();
        myReader.Close();
    }

И это мое событие selectedIndexChanged:

    protected void lstLocations_SelectedIndexChanged(object sender, EventArgs e)
    {
        string value = null;
        try
        {
            foreach (ListItem checkBox in lstLocations.Items)
            {
                if (checkBox.Selected == true)
                {
                    value = checkBox.Text;

                    if (value == "Africa")
                    {
                        txtCountryOfAfrica.Visible = true;
                        lblAfricaCountry.Visible = true;
                    }
                }
                else
                {
                    value = checkBox.Text;

                    if (value == "Africa")
                    {
                        txtCountryOfAfrica.Visible = false;
                        lblAfricaCountry.Visible = false;
                    }
                }
            }

        }
        catch (Exception ex)
        {
            string msg = "Select Error:";
            msg += ex.Message;
            throw new Exception(msg);
        }

    }

Метод Page_Load:

     protected void Page_Load(object sender, EventArgs e)
    {
        string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
        txtUser.Text = userName;

        if (!IsPostBack)
        {
            ContainerDocumentation.ActiveTab = tabAddCustomer;
            PopulateSector();
            CreateRegionList();
            PopulateOpportunitySource();
            CreatelstProductGroupList();
            PopulateStatus();

            PopulateTenders();
            PopulateOtherOpportunityType();
        }
    }

person Kerieks    schedule 14.11.2013    source источник
comment
Использование !Ispostback в проверке загрузки формы   -  person senthilkumar2185    schedule 14.11.2013
comment
@SenthulKumar, я добавил как внутри, так и снаружи (!IsPostBack), но это не та часть, которая не работает. Заполнение работает идеально, единственная часть, которая не работает, - это при выборе флажка он должен перейти к событию selectedIndexChanged, но он не входит в этот метод....   -  person Kerieks    schedule 14.11.2013
comment
значение = checkBox.SelectedItem.Text;   -  person senthilkumar2185    schedule 14.11.2013
comment
@SenthilKumar, спасибо за помощь, ценю это! Проблема в том, что он даже не достигает строкового значения = null; или оператор foreach... он вообще не входит в этот метод....   -  person Kerieks    schedule 14.11.2013


Ответы (2)


Мое предположение: вы вызываете CreateRegionList в Page_Load, не проверяя свойство IsPostBack. Это перезагружает все элементы из базы данных и предотвращает запуск этого события.

Итак, проверьте это:

protected bvoid Page_Load(Objject sender, EventArgs e)
{
    if(!IsPostBack)
    {
        CreateRegionList();
    }
}
person Tim Schmelter    schedule 14.11.2013
comment
Я проверил, и он находится в IsPostBack... Я отредактировал свой вопрос, чтобы также добавить pageLoad. Спасибо за быстрый ответ.... - person Kerieks; 14.11.2013

Это потому, что вы должны установить true для:

lstLocations.AutoPostBack = true;
person Tomasz Damian Dziechciarz    schedule 03.09.2014