2012-01-25 3 views
0

У меня есть прокручиваемый GridView в моей веб-части, и я должен сделать вызов AJAX для каждого пользовательского прокрутки. Я использую JQuery 1.7.1 в веб-части для вызова класса обработчика C#.Веб-часть SharePoint: не удается выполнить вызов jQuery ajax для обработчика ashx

Я получаю ошибку 500: Внутренняя ошибка сервера.

Вот образец ASCX:

<div id="divProducts" style="height:300px;overflow:auto"> 
    <asp:GridView ID="GridView1" runat="server" CellPadding="4" ForeColor="#333333" EnableViewState="false"> 
     <AlternatingRowStyle BackColor="White" /> 
     <FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" /> 
     <HeaderStyle CssClass="header" BackColor="#990000" Font-Bold="True" ForeColor="White" /> 
     <PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" /> 
     <RowStyle BackColor="#FFFBD6" ForeColor="#333333" /> 
    </asp:GridView> 
</div> 

<div id="divProgress" style="margin-top: -50px;margin-left:150px;z-index:-999"> 
    <asp:Image ID="image1" ImageUrl="~/_layouts/images/MyWebPart/loading.gif" width="100" height="100" runat="server" /> 
</div> 

<script type="text/javascript"> 
    $(document).ready(function() { 

     //initially hide the loading gif 
     $("#divProgress").hide(); 

     //Attach function to the scroll event of the div 
     $("#divProducts").scroll(function() { 

      //User has scrolled to the end of the grid. Load new data.. 
      $("#divProgress").ajaxStart(function() { 
       $(this).show(); 
      }); 
      $("#divProgress").ajaxStop(function() { 
       $(this).hide(); 
      }); 

      BindNewData(); 

     }); 

    }); 

    function BindNewData() { 
      $.ajax({ 
       type: "GET", 
       url: "/_layouts/MyWebPart/FetchRecordsHandler.ashx", 
       success: function (data) { 
        alert('data ', data); 
       }, 
       error: function (xhr, ajaxOptions, thrownError) { 
        alert(xhr.status); 
        alert(thrownError); 
       } 
      }); 
     } 
</script> 

Я добавил ASHX файл, который будет развернут в Layouts папке моего веб-части проекта (Layouts/MyWebPart/FetchRecordsHandler.ashx):

<%@ WebHandler Language="C#" Class="MyWebPart.Code.FetchRecordsHandler" CodeBehind="FetchRecordsHandler.cs" %> 

И я создал класс, который реализует FetchRecordsHandler IHttpHandler с правильным пространством имен:

namespace MyWebPart.Code 
{ 
    class FetchRecordsHandler : IHttpHandler 
    { 
     public void ProcessRequest(HttpContext context) 
     { 

      context.Response.Write("From the handler at " + DateTime.Now); 

     } 

     public bool IsReusable 
     { 
      get 
      { 
       return false; 
      } 
     } 
    } 
} 

Этот метод не работает в моей веб-части. Любая идея решения или, может быть, еще одна техника, чтобы сделать ajax вызовы из событий прокрутки в веб-часть?

Thx

ответ

0

Вы должны изменить свой .ashx на что-то вроде:

<%@ WebHandler Language="C#" Class="MyWebPart.Code.FetchRecordsHandler, {my assembly}, Version=1.0.0.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxxxxxxx" %> 

Где {моя сборка} является имя скомпилированного .dll (без .dll), вероятно, MyWebPart и xxxxxxxxxxxxxxxx - это токен открытого ключа для вашей сборки. Одним из способов найти это будет просмотр развернутого .ascx из вашей веб-части, первая строка или около того должна содержать что-то подобное.

Я предполагаю, что полученная вами ошибка 500 имеет какое-то отношение к тому факту, что SharePoint не может загрузить сборку для вашего .ashx. Вы можете посмотреть в средстве просмотра событий для получения более подробной информации.

+0

Поскольку у меня не было много времени для выполнения этой задачи, я выбрал другое решение, которое работает (используя aspx с его кодомBehind). В первый раз, когда у меня есть время, я тестирую ваше решение. спасибо – Dino