ASP.NET: «Требуется объект» при повторении кнопок ссылки в панели обновления - PullRequest
0 голосов
/ 19 июня 2009

У меня есть UpdatePanel, у которого есть повторитель повторяющихся LinkButtons. Когда я нажимаю LinkButton, страница выполняет частичную обратную передачу, а затем я получаю сообщение об ошибке JavaScript: «Требуется объект». Я попытался отладить JavaScript, но не смог получить стек вызовов. Если я удаляю UpdatePanel, кнопки LinkButton делают полную обратную передачу, и они исчезают со страницы. Как я могу заставить эту UpdatePanel работать?

<ajax:UpdatePanel ID="wrapperUpdatePanel" runat="server" UpdateMode="Always">
    <ContentTemplate>
        <asp:Repeater ID="endpointRepeater" runat="server" OnItemDataBound="EndpointDataBound">
            <HeaderTemplate>
                <div class="sideTabs">
                    <ul>
            </HeaderTemplate>
            <ItemTemplate>
                <li>
                    <asp:LinkButton ID="endpointLink" runat="server" OnClick="EndpointSelected" />
                </li>
            </ItemTemplate>
            <FooterTemplate>
                </ul>
                </div>
            </FooterTemplate>
        </asp:Repeater>
    </ContentTemplate>
</ajax:UpdatePanel>

обязательный код:

protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack)
    {
        this.SelectedEndpoint = Factory.Get<IEndpoint>(Enums.EndPoints.Marketing);
    }
    IEndpointCollection col = EndpointCollection.GetActivelySubscribingEndpointsForPart(this.Item);

    if (this.Item.IsGdsnItem)
        col.Add(Factory.Get<IEndpoint>(Enums.EndPoints.Gdsn));

    if (col.Count > 0)
        col.Insert(0, Factory.Get<IEndpoint>(Enums.EndPoints.Marketing));

    this.endpointRepeater.DataSource = col;
    this.endpointRepeater.DataBind();

    if (this.endpointRepeater.Items.Count > 0)
    {
        LinkButton lb = this.endpointRepeater.Items[0].FindControl("endpointLink") as LinkButton;
        this.EndpointSelected(lb, new EventArgs());
    }
}

спасибо, знак

1 Ответ

0 голосов
/ 19 июня 2009

Возможно, это не ваша основная проблема, но при включении объекта в Repeater, который нуждается в событии, вы не должны использовать собственные события этого элемента управления. Вместо этого вы должны использовать событие повторителя OnCommand.

Если бы я догадался, ваша проблема вызвана тем, что ретранслятор не поддерживает свое состояние DataBound в PostBacks. Кнопка Link исчезает из поля зрения, поскольку она не привязана к странице в каждом PostBack, поэтому, когда ответ отправляется обратно клиенту, он не имеет к нему никакого отношения.

Похоже, что UpdatePanel ожидает, что из ответа AJAX будет возвращена та же (или похожая) разметка, что и на странице, поэтому возврат ничего для повторителя не вызывает проблем.

Попробуйте привязать ваш репитер к странице / элементу управления в методе OnInit(). Это должно позволить загружать ViewState для повторителя на каждый PostBack.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...