UpdatePanel с ретранслятором ASP.NET и Aync Postback - PullRequest
2 голосов
/ 25 апреля 2009

У меня довольно раздражающая проблема здесь

Я не могу заставить мое событие CheckBox CheckedChange сработать, или перехватить, или что-то еще, что терпит неудачу:

ASPX код

<asp:UpdatePanel runat="server" ID="udp_Lists" UpdateMode="Always">
<ContentTemplate>
    <asp:Repeater ID="rep_showings" runat="server">
        <HeaderTemplate>
        </HeaderTemplate>
        <ItemTemplate>
            <div class="div_assignment">
                <div class="div_assignment_text">
                    <asp:LinkButton runat="server" ID="lnk_show_task" OnClick="lnk_show_task_Click" CommandArgument='<%# Eval("Id") %>' Text='<%# Eval("TaskTitle") %>'></asp:LinkButton>
                </div>
                <div class="div_assignment_checkbox">
                    <asp:CheckBox runat="server" ID="chk_handle" AutoPostBack="true" OnCheckedChanged="chk_handle_Changed" ToolTip='<%# Eval("Id") %>' />
                </div>
            </div>
        </ItemTemplate>
        <FooterTemplate>
        </FooterTemplate>
    </asp:Repeater>
</ContentTemplate>
<Triggers>
</Triggers>

Функция кода "chk_handle_Changed" никогда не достигается. Linkbutten работает отлично.

1 Ответ

6 голосов
/ 25 апреля 2009

Я посмотрел на вашу проблему. Я использовал следующий код:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        this.rep_showings.DataSource = new object[] { new { Title = "title", ID = "id" } };
        this.rep_showings.DataBind();
    }
}

protected void chk_handle_Changed(object source, EventArgs e)
{
    Trace.Write("here");
}

protected void lnk_show_task_Click(object source, EventArgs e)
{
    Trace.Write("here 2");
}

protected void rep_showings_ItemCommand(object source, RepeaterCommandEventArgs e)
{ }

Приведенный выше код работает. Я думаю, что вы, вероятно, повторно привязываете свой повторитель к каждой обратной передаче - я проверил это, удалив оператор if (! IsPostBack) в Page_Load (), и мне удалось воспроизвести описанное вами проблемное поведение.

Следует по возможности избегать повторного связывания элемента управления для каждой обратной передачи. После заполнения элемента управления его данные обрабатываются ViewState, поэтому, если данные не изменяются, вам, вероятно, не следует повторно связывать его все время.

...