0

我有一个 ASP.NET Web 应用程序。在Page_Load带有项目的网格视图上创建。我还有一个<asp:Textbox>和一个搜索按钮。我PageMethods用来摆脱回发。这个想法是,当单击按钮时,它将调用 javascript 函数,然后调用WebMethod. WebMethod返回基于搜索条件的项目列表。

如何获取这些项目并用它们填充 GridView?

换句话说,它类似于部分更新——单击按钮时它应该只更新 GridView。

下面是 WebMethod 的代码:

[WebMethod]
    public static List<Item> SearchResults(string text)
    {
        ItemFunctions item_functions = new ItemFunctions();
        List<Item> items = new List<Item>();
        items = item_functions.searchResults(text);
        return items;
    }

这是 GridView、按钮和文本框:

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />
<asp:TextBox ID="search_textbox" runat="server" />
        <input type="button" id="Button1" value="Search" onclick="SearchResults();" />
        <div id="searchResults_GridView" >
            <asp:GridView ID="GridView1" AllowPaging="true" GridLines="Both" runat="server" AllowSorting="True"
            AutoGenerateColumns="False"
            Width="740px"
            CausesValidation="False">
            <Columns>
                <asp:BoundField DataField="item_name" HeaderText="item_name" />
                <asp:BoundField DataField="item_description" HeaderText="item_description" />
                <asp:BoundField DataField="item_quantity" HeaderText="item_quantity" />
                <asp:BoundField DataField="category_name" HeaderText="category_name" />
                <asp:BoundField DataField="type_name" HeaderText="type_name" />
                <asp:BoundField DataField="item_available" HeaderText="item_available" />
                <asp:BoundField DataField="item_serial_number" HeaderText="item_serial_number" />
                <asp:BoundField DataField="item_permission_status" HeaderText="item_permission_status" />
                <asp:BoundField DataField="item_location" HeaderText="item_location" />
                <asp:CommandField ShowSelectButton="true" SelectText="View" />
            </Columns>
        </asp:GridView>
        </div>

这是单击按钮时调用的 SearchResults 函数:

<script>
    function SearchResults() {
        PageMethods.SearchResults(OnSucceeded, OnFailed);
    }

    function OnSucceeded(result, userContext, methodName) {
    }

    function OnFailed(error, userContext, methodName) {
        alert("An error occured :(");
    }
</script>

我的javascript技能很差,我还在学习,否则理论上我认为其余的代码应该可以工作。

4

1 回答 1

1

您可以在 javascript 中执行此操作,但此时它需要您转储 GridView 的 html(因为在 GridView 呈现后它只是 HTML)并重新创建一个简单的 HTML 表。虽然这可能是首选解决方案,但您将在完整回发时丢失所有数据,并且需要重新运行 javascript。

您可以考虑使用 UpdatePanel 来实现此功能。有关使用 UpdatePanels 的帮助,请参阅以下链接:

http://msdn.microsoft.com/en-us/library/bb386454(v=vs.100).aspx

如何在 asp.net 中使用 updatePanel 而不刷新所有页面?

于 2013-10-07T14:18:10.700 回答