CheckBoxList очищается при нажатии кнопки - PullRequest
0 голосов
/ 06 марта 2012

Я создаю настраиваемое представление в визуальной веб-части SharePoint с использованием ASP.NET (Visual C #), у меня есть CheckBoxList и кнопка.

Наценка для списка и кнопки:

<td>
    <asp:checkboxlist ID="cblYearLst" runat="server" EnableViewState="true" />
</td>
<td>
     <asp:Button ID="btnRefineSearch" Text="Refine Search" runat="server" />
</td>

Я добавляю элементы в CheckBoxList на PreRender:

if (!IsPostBack)
{
    if (LstYears != null)
    {
        for (int i = 0; i < LstYears.Count(); i++)
        {
            cblYearLst.Items.Add(new ListItem(LstYears[i], LstYears[i]));
        }
    }
}

И я вызываю обработчик события для кнопки на Page_Load:

btnRefineSearch.Click += new EventHandler(this.btnRefineSearch_Click);

Все элементы списка CheckBox не остаются выделенными после нажатия кнопки. Я могу получить выбранные значения, но они не будут отображаться как выбранные. Когда я добавляю обработчик события Click для кнопки в событии предварительного рендеринга, данные отображаются соответствующим образом, но выбранные значения больше не могут быть получены с помощью моего события Click.

Есть идеи, что может быть причиной такого поведения?

Ответы [ 2 ]

1 голос
/ 06 марта 2012

Вы пытались переместить привязку списка флажков в page_load вместо pre_render?Просто идея, потому что кажется, что страница теряет выборки при обратной передаче, и вы каждый раз обновляете опции.

ОБНОВЛЕНИЕ: Я создал быструю страницу, и это работает правильно.Вы отключили ваше viewstate для всей страницы в директиве вашей страницы или, возможно, в файле web.config?Я вижу, вы включили его в списке флажков, но, возможно, есть глобальная настройка, отбрасывающая вас.

protected void Page_Load(object sender, EventArgs e)
    {
        btnRefineSearch.Click += new EventHandler(this.btnRefineSearch_Click);</p>

<code>    List<string> LstYears = new List<string>();
    LstYears.Add("one");
    LstYears.Add("two");
    LstYears.Add("three");
    LstYears.Add("four");

    if (!IsPostBack)
    {
        if (LstYears != null)
        {
            for (int i = 0; i < LstYears.Count; i++)
            {
                cblYearLst.Items.Add(new ListItem(LstYears[i], LstYears[i]));
            }
        }
    }
}

private void btnRefineSearch_Click(object sender, EventArgs args)
{
    Response.Write(cblYearLst.SelectedValue);
}  
</code>
0 голосов
/ 15 марта 2012

Я выяснил проблему, поскольку AutoEventWireUp имеет значение true, поскольку Кинэн предложил, чтобы все работало, если я это сделаю в page_load.

Проблема была в том, что Page_Load вызывался дважды, и я обнаружил, что это потому, что я перенаправлял пользователя на тот же URL-адрес с параметрами QueryString. После внесения столь необходимых изменений мой код работает очень хорошо.

+1 Keenan за вашу помощь и спасибо (@jfmags) за то, что предупредили меня, сказав, что вы думаете, что это что-то другое.

: D

...