我有一个 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技能很差,我还在学习,否则理论上我认为其余的代码应该可以工作。