我想用Page_Load事件填充DataTable,然后当从客户端发送Ajax调用时能够从ashx处理程序页面访问它。目前,每次我对处理程序页面进行Ajax调用时都会填充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 :(得分:0)
处理程序实际上并不应该知道有关其自身之外的代码/对象的任何信息。
如果您在这种情况下无法使用处理程序,则可以在页面中设置private static DataTable MyTable;
。
然后在page_load
填充此静态属性。
然后,您应该能够在从Ajax调用的Web方法中访问此属性。 Web方法将成为您的页面代码隐藏的一部分,因此可以访问上面的私有属性集。将处理程序中的代码放入此Web方法中 - 禁止绑定。