2013-05-10 50 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