2013-05-10 84 views
0

我想用Page_Load事件填充DataTable,然後當從客戶端發送Ajax調用時,能夠從ashx處理程序頁面訪問它。目前,每次我對處理程序頁面進行Ajax調用時都會填充DataTable,這使得它有點慢。這是我目前做的:從ashx查詢DataTable頁面

Default.aspx.cs

public DataTable fillSCOMDTts() 
    { 
     //SCOM TableAdapter and DataTable 
     dsCIInfoTableAdapters.vManagedEntityTableAdapter taSCOM; 
     taSCOM = new dsCIInfoTableAdapters.vManagedEntityTableAdapter(); 

     dsCIInfo.vManagedEntityDataTable dtSCOM = new dsCIInfo.vManagedEntityDataTable(); 
     taSCOM.Fill(dtSCOM); 

     return dtSCOM; 
    } 

Ajax調用從客戶端:

$.ajax({ 
    url: '/FindFootprint.ashx?queryStr=' + strParameter, 
    dataType: 'json', 
    success: function (data) { 
       //do stuff 
}); 

FindFootprint.ashx.cs

public void ProcessRequest(HttpContext context) 
    { 
     string strParameter = context.Request.QueryString["queryStr"]; 

     bool binSCOMts = false; 

     Default d = new Default(); 
     DataTable dtSCOMts = d.fillSCOMDTts(); 

     var qstSCOMts = (from row in dtSCOMts.AsEnumerable() 
         let fieldName = row.Field<string>("DisplayName") 
         where fieldName.ToLower().Contains(strParameter) 
         select fieldName).ToArray(); 

     if (qstSCOMts.Length > 0) 
     { 
      binSCOMts = true; 
     } 

     JsonObject JO = new JsonObject(); 
     JO.Add("assetName", strParameter); 
     JO.Add("inSCOMts", binSCOMts.ToString()); 

     context.Response.ContentType = "text/plain"; 
     context.Response.Write(JO.ToString()); 
    } 

回答

0

處理程序不是真的應該知道任何關於代碼/對象的東西。

如果您在此情況下無法使用處理程序,則可以在頁面中設置private static DataTable MyTable;

然後在您的page_load填充此靜態屬性。

然後,您應該可以在您從您的Ajax調用的Web方法內訪問此屬性。 Web方法將成爲您的頁面代碼隱藏的一部分,因此可以訪問上面的私有屬性集。將你的處理程序的代碼放入這個web方法 - 禁止綁定。

+0

好吧,我不熟悉Web方法,但我想我找到了一個代碼示例,將有所幫助。謝謝 – 2013-05-15 12:58:19

+0

我遇到從WebMethod訪問DataTable的問題。它是如何申報的? – 2013-05-15 14:08:07