SharePoint Web部件:无法对ashx处理程序进行jquery ajax调用

时间:2012-01-25 14:17:55

标签: ajax sharepoint web-parts ashx

我的Web部件中有一个可滚动的GridView,我必须在每个用户滚动上进行一次AJAX调用。我在Web部件中使用Jquery 1.7.1来调用c#处理程序类。

我收到错误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文件,该文件将部署在我的Web部件项目的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;
            }
        }
    }
}

此方法在我的Web部件中不起作用。从滚动事件到Web部件进行ajax调用是否有解决方案或其他技术的想法?

THX

1 个答案:

答案 0 :(得分:0)

您需要将.ashx更改为:

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

其中{my assembly}是已编译的.dll的名称(不包含.dll),可能MyWebPart和xxxxxxxxxxxxxxxx是程序集的公钥令牌。找到这个的一种方法是从你的web部分查看部署的.ascx,第一行左右应该包含类似的内容。

我认为您收到的500错误与SharePoint无法为您的.ashx加载程序集这一事实有关。您可以查看事件查看器以获取更多详细信息。