ASP.net:刷新GridView而不刷新整个页面? (AsyncPostBackTrigger真的很慢)

时间:2017-01-27 20:58:47

标签: c# asp.net gridview updatepanel postback

我是ASP.net的新手,试图让一些超级慢代码运行得更快。

目前,代码在UpdatePanel中使用GridView。 UpdatePanel位于模态弹出窗口中。无论何时打开该模态,都必须刷新内容。我们通过使用AsyncPostBackTrigger来实现这一点,据我所知,在返回和呈现表之前,我会了解整个页面生成周期。

.aspx.cs

public void UpdateWatchListPopup(object sender, System.EventArgs e)
{
    grdWatchList.DataBind();
}

的.aspx:

<asp:UpdatePanel ID="UpdatePanel3" runat="server" >

    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="UpdateWatchListPopupBtn" EventName="Click" /> 
    </Triggers>

    <ContentTemplate>

        <div style="display:none">
            <asp:Button ID="UpdateWatchListPopupBtn" runat="server" Text="" OnClick="UpdateWatchListPopup" />
        </div>

        <asp:GridView ID="grdWatchList" OnSorting="grdWatchList_Sorting" runat="server" OnRowCreated="grdWatchList_RowCreated" OnRowDataBound="grdWatchList_RowDataBound" AllowSorting="true" AutoGenerateColumns="False">
            <Columns>
                <asp:TemplateField>

这真的很慢(显示结果需要5秒),并不是因为要返回大量数据!我的猜测是,Page_Load()正在做一堆不必刷新特定GridView的计算。

还有其他方法可以异步刷新GridView吗?我想过使用WebMethod获取数据,然后从客户端手动重新填充表。我想知道是否还有其他选择?

谢谢

2 个答案:

答案 0 :(得分:2)

您可能需要考虑使用客户端网格,我已经使用Jquery数据库已经有一段时间了,主要是使用ASPNET MVC,但您也可以将其用于Web表单。它很容易上手,有很多很好的例子,最好的部分是没有回发。该工具内置分页,排序,搜索等。

Heres是在Web表单http://datatables.extrared.net/Sample/

上运行的Jquery数据表的一个很好的例子

在这里,您可以开始使用Jquery数据表https://datatables.net/

答案 1 :(得分:1)

您不一定需要PostBack来打开弹出窗口。以下是使用jQuery UI Dialo g。

的代码段
<div id="hiddenGrid" style="display: none">
    <asp:GridView ID="GridView1" runat="server"></asp:GridView>
</div>

<input type="button" value="Open Dialog" onclick="createPopup()" />

<script type="text/javascript">
    function createPopup() {
        var html = document.getElementById('hiddenGrid').innerHTML;
        $('<div />').html(html).dialog({
            resizable: false,
            draggable: true,
            modal: true,
            width: 600,
            height: 800,
            create: function (event, ui) {
                $(".ui-dialog-titlebar").html("<div onclick=\"closePopup()\" class=\"dialog-closeButton\"></div>");
            },
            open: function (event, ui) {
                $('.ui-widget-overlay').bind('click', function () {
                    closePopup();
                })
            }
        });
    }

    function closePopup() {
        $(".ui-dialog-content").dialog("destroy");
    }
</script>

但是如果你必须用PostBack打开Modal,你可以检查它是否是Async PostBack并跳过你不需要的Page_Load中的项目。

protected void Page_Load(object sender, EventArgs e)
{
    if (ScriptManager.GetCurrent(this.Page).IsInAsyncPostBack)
    {
        //updatepanel page load
    }
    else
    {
        //normal page load
    }
}