Веб-часть SharePoint: не удается выполнить jquery ajax-вызов для обработчика ashx - PullRequest
0 голосов
/ 25 января 2012

У меня есть прокручиваемый GridView в моей веб-части, и я должен сделать вызов AJAX для каждой пользовательской прокрутки.Я использую Jquery 1.7.1 в веб-части для вызова класса обработчика ac #.

Я получаю ошибку 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

1 Ответ

0 голосов
/ 25 января 2012

Вам нужно изменить ваш .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. Вы можете посмотреть в программе просмотра событий более подробную информацию.

...