0

我想用 Page_Load 事件填充 DataTable,然后能够在从客户端发送 Ajax 调用时从 ashx 处理程序页面访问它。目前,每次我对处理程序页面进行 Ajax 调用时都会填充 DataTable,这使得它有点慢。这是我目前所做的:

默认.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());
    }
4

1 回答 1

0

处理程序实际上不应该知道有关其自身之外的代码/对象的任何信息。

如果在这种情况下您不能使用处理程序,那么您可以private static DataTable MyTable;在页面中设置 a 。

然后在你page_load填充这个静态属性。

然后,您应该能够在您从 Ajax 调用的 Web 方法中访问此属性。Web 方法将成为您页面代码隐藏的一部分,因此可以访问上面设置的私有属性。将处理程序中的代码放入此 Web 方法 - 禁止绑定。

于 2013-05-10T15:44:22.610 回答