ASP.NET - предотвращение обновления страницы с помощью ModalPopupExtender - PullRequest
0 голосов
/ 15 июня 2009

У меня есть страница ASP.NET с 10 динамически генерируемыми элементами LinkButton. Когда пользователь щелкает один из этих элементов LinkButton, я хочу отобразить его текст в модальном диалоговом окне. Пользователь может затем изменить текст, введя значение в TextBox. Мой код для этого выглядит следующим образом:

<asp:ScriptManager ID="theScriptManager" runat="server" />
<asp:UpdatePanel ID="myUpdatePanel" runat="server">
    <ContentTemplate>
        <asp:Table ID="myTable" runat="server" OnInit="myTable_Init" CellPadding="10" CellSpacing="10" />
    </ContentTemplate>
</asp:UpdatePanel>

<asp:LinkButton ID="testLinkButton" runat="server" />
<cc1:ModalPopupExtender ID="myPopupExtender" runat="server" TargetControlID="testLinkButton"
    OkControlID="okButton" PopupControlID="myPanel" />

<asp:Panel ID="myPanel" runat="server" Style="display: none;">
    <table border="1" cellpadding="0" cellspacing="0"><tr><td>
        <table border="0" cellpadding="0" cellspacing="0" style="width: 300px;">
            <tr><td colspan="2" style="background-color: Blue; font-weight: bold; color: White;">
                &nbsp;Test
            </td></tr>
            <tr>
                <td>You clicked <asp:TextBox ID="numTextBox" runat="server" MaxLength="3" />.</td>
                <td align="right" style="padding-top: 5px; padding-bottom: 5px;">
                    <asp:Button ID="okButton" runat="server" Text="OK" OnClick="okButton_Click" />&nbsp;
                </td>
            </tr>
        </table>
    </td></tr></table>
</asp:Panel>

Мой код для этого кода ASP.NET выглядит следующим образом:

private LinkButton selectedLinkButton = null;

protected void Page_Load(object sender, EventArgs e)
{}

protected void myTable_Init(object sender, EventArgs e)
{
        TableRow row = new TableRow();
        for (int i = 1; i < 11; i++)
        {
            LinkButton linkButton = new LinkButton();
            linkButton.Text = i.ToString();
            linkButton.Click += new EventHandler(linkButton_Click);
            linkButton.CommandArgument = i.ToString();

            AddLinkButtonToRow(linkButton, row);
        }
        myTable.Rows.Add(row);

}

protected void linkButton_Click(object sender, EventArgs e)
{
    selectedLinkButton = (LinkButton)(sender);
    numTextBox.Text = selectedLinkButton.CommandArgument;

    myPopupExtender.Show();
}

protected void okButton_Click(object sender, EventArgs e)
{
    if (selectedLinkButton != null)
    {
        selectedLinkButton.Text = numTextBox.Text.Trim();
    }
}

private void AddLinkButtonToRow(LinkButton linkButton, TableRow row)
{
    TableCell cell = new TableCell();
    cell.Controls.Add(linkButton);
    row.Cells.Add(cell);
}

Моя проблема в том, что я хочу уменьшить количество обратных передач. Для этого я решил использовать инструментарий ASP.NET AJAX. К сожалению, мне не удается обновить текст LinkButton после того, как пользователь нажимает «ОК» в диалоговом окне. Кроме того, я, кажется, все еще получаю постбэки. Как я использую это неправильно?

Спасибо,

Ответы [ 2 ]

2 голосов
/ 15 июня 2009

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

Вам нужно либо переместить свой ModalPopupExtender и код в UpdatePanel, либо назначить Триггер обновления, который прикреплен к вашей кнопке Ok в вашем модальном всплывающем окне.

Если вы по-прежнему не получаете надлежащего обновления, вам может потребоваться добавить команду myUpdatePanel.Update () в код кнопки «ОК», чтобы обновить панель после предоставления содержимого для нового LinkButton.

0 голосов
/ 09 августа 2011

Добавление триггера UpdatePanel для моей кнопки Close помогло предотвратить полную обратную передачу страницы. Поэтому добавление триггера для вашей кнопки OK должно сделать то же самое.

...