ASP.net UpdatePanel - работает первый раз, затем не работает - PullRequest
1 голос
/ 07 мая 2010

У меня есть простая панель обновления, которая содержит ASP DataList.Показывает список документов и статус их утверждения.Вот пример разметки

<asp:UpdatePanel ID="upDocuments" runat="server" UpdateMode="Always">
    <ContentTemplate>
        <asp:DataList ID="dlDocuments" runat="server" RepeatLayout="Table">
            <HeaderTemplate>
                <table cellpadding="0" cellspacing="0" style="width:100%;">
                    <thead>
                        <th><span style="font-size:110%;">User Documents</span></th>
                        <th></th>
                        <th></th>
                        <th></th>
                    </thead>
            </HeaderTemplate>
            <ItemTemplate>
                    <tr>
                        <td>
                            <asp:HyperLink ID="lnkDocName" runat="server" /></td>
                        <td>
                            <asp:Label ID="lblDocType" runat="server" /></td>
                        <td>
                            <asp:Label ID="lblApproved" runat="server" /></td>
                        <td>
                            <asp:LinkButton ID="btnApprove" runat="server" Visible="false" Text="Approve" />&nbsp;&nbsp;
                            <asp:Label ID="lblApprovedBy" runat="server" /></td>
                    </tr>
            </ItemTemplate>
            <FooterTemplate>
                </table>
            </FooterTemplate>
        </asp:DataList>
    </ContentTemplate>
</asp:UpdatePanel>

В моем коде есть подпрограмма, вызванная из Page_Load, чтобы получить данные и связать их с DataList.Вот соответствующие строки.

// Load the documents - loaded to docList (List<Document>)
dlDocuments.DataSource = docList;
dlDocuments.DataBind();

Пока все отлично.Затем, во время обработчика привязки элемента DataList, я связываю элемент управления btnApprove с обработчиком, чтобы загрузить документ и утвердить его.

if (!doc.Approved)
{
    LinkButton btnApprove = (LinkButton)e.Item.FindControl("btnApprove");
    btnApprove.Click += new EventHandler(btnApprove_Click);
    btnApprove.Attributes.Add("docKey", doc.docKey);
    btnApprove.Visible = true;
}

Затем

protected void btnApprove_Click(object sender, EventArgs e)
{
    LinkButton btnApprove = (LinkButton)sender;
    int docKey = Int32.Parse(btnApprove.Attributes["docKey"]);
    Document doc = // Load document
    doc.Approved = true;
    doc.ApprovedBy = Page.User.Identity.Name;
    doc.ApprovedDate = DateTime.Now;

    // Save doc back to DB

    LoadUserDocuments();
}

Опять все отлично,Я загружаю страницу, вижу документы и их статус и ссылки.Мой тестовый пример выглядит следующим образом:

  1. Загрузить страницу
  2. Нажмите «Одобрить» для первого документа.
  3. Убедитесь, что он утвержден.
  4. Нажмите «Одобрить» для второго документа.
  5. Убедитесь, что он утвержден.

Мой тест не пройден на шаге 5. Я отладил и вызвал обработчик кликов, DataListпривязывается к результатам, и документ сохраняется в базе данных в соответствии с утверждением.Однако страница никогда не обновляется, чтобы показать обновленный статус второго документа.Кто-нибудь знает, какой шаг я пропускаю в посте назад, что приводит к сбою последующих постов?

1 Ответ

0 голосов
/ 07 мая 2010

Проверяете ли вы PostBack, когда связываете свои данные на Page_Load?

if(!IsPostBack)
      BindDataList();
...