2013-10-07 47 views
0

我有一個ASP.NET Web應用程序。在Page_Load上創建包含項目的網格視圖。我也有一個<asp:Textbox>和一個搜索按鈕。我正在使用PageMethods擺脫回發。 想法是,當按鈕被點擊時,它會調用javascript函數,然後它會調用WebMethodWebMethod根據搜索到的條件返回項目列表。用於將項目列表提取到GridView的JavaScript代碼

如何獲取這些項目並使用它們填充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> 

這是被稱爲按鈕點擊SearchResult所功能:

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

    function OnSucceeded(result, userContext, methodName) { 
    } 

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

我的JavaScript技能非常糟糕,我仍在學習,否則在理論上我認爲其餘的代碼應該工作。

+1

保持它在.NET的WebForms風格,我建議你看看UpdatePanel控件。不完全是你要找的東西,但仍然是「部分更新」。按照你想要做的方式做這件事有點「黑客」的網絡形式,並可能會導致刷新時出現問題或如此... –

+0

是的,更新面板似乎做這項工作。謝謝:) – Apostrofix

回答

1

你可以在javascript中做到這一點,但在這一點上,它會要求你轉儲GridView的html(因爲在GridView呈現後它只有HTML)並重新創建一個簡單的HTML表。雖然這可能是首選解決方案,但您將丟失全部回發的所有數據,並且需要重新運行JavaScript。

您可以使用UpdatePanel查看此功能。請參閱使用的UpdatePanel上的幫助以下鏈接:

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

How do I use updatePanel in asp.net without refreshing all page?

+0

最後,我做了更新面板。感謝您的評論。 – Apostrofix

相關問題