【问题标题】:ASP.NET - Prevent Page Refresh with ModalPopupExtenderASP.NET - 使用 ModalPopupExtender 防止页面刷新
【发布时间】:2009-06-15 16:42:41
【问题描述】:

我有一个 ASP.NET 页面,其中包含 10 个动态生成的 LinkBut​​ton 元素。当用户单击这些 LinkBut​​ton 元素之一时,我想在模式对话框中显示其文本。然后,用户可以通过在 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 工具包。不幸的是,一旦用户在对话框中单击“确定”,我就无法成功更新 LinkBut​​ton 文本。此外,我似乎仍在收到回发。我怎么用错了?

谢谢,

【问题讨论】:

    标签: asp.net ajax modalpopupextender


    【解决方案1】:

    默认情况下,UpdatePanel 只会在其中的对象触发各种事件时触发刷新。

    您需要在 UpdatePanel 中移动您的 ModalPopupExtender 和代码,或者在您的模态弹出窗口中分配一个附加到 Ok 按钮的更新触发器。

    如果您仍然没有得到适当的刷新,您可能需要在您的 Ok 按钮代码中添加一个 myUpdatePanel.Update() 命令,以便在您为新的 LinkBut​​ton 提供内容后刷新面板。

    【讨论】:

      【解决方案2】:

      为我的Close 按钮添加UpdatePanel 触发器有助于防止页面进行完整的回发。因此,为您的OK 按钮添加一个触发器也应该这样做。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-25
        • 1970-01-01
        • 1970-01-01
        • 2019-08-03
        • 2011-12-14
        • 2017-03-14
        相关资源
        最近更新 更多