如何在ASP.net母版页中使用jQuery AJAX?

时间:2010-12-15 22:10:22

标签: asp.net jquery ajax master-pages

我有一个带有母版页的ASP.net Web应用程序。在我的母版页的菜单栏中,有一个搜索功能,用户可以在其中键入查询并单击按钮。单击该按钮时,用户的浏览器将导航到显示搜索结果的页面。这种功能很有效。

但是,我决定使用jQuery AJAX和jQuery Autocomplete来使程序更易于使用。搜索在http://example.com/page1.aspxhttp://example.com/page2.aspx中运行良好,但在http://example.com/subdirectory/index.aspx中无效。

以下是执行自动填充的javascript代码:(来自母版页)

function setupSerialNumberAutocomplete(id) {
    $(id).autocomplete({
        source: function(request, response) {
            $.ajax({
                url: "DeviceSelection.aspx/getDeviceFieldAutocomplete",
                data: "{ 'text': '" + escape(request.term) + "', 'field': 'SerialNumber' }",
                dataType: "json",
                type: "POST",
                contentType: "application/json",
                dataFilter: function(data) { return data; },
                success: function(data) {
                    response($.map(data.d, function(item) {
                        return {
                            value: item
                        }
                    }))
                },
                error: function(xhr, status) {
                    var exception = eval("(" + xhr.responseText + ")");
                    $("#divStatus").html("Error fetching registration codes list: " + xhr.statusText + " - " + exception.Message + ".");
                }
            }); //end - ajax
        },
        minLength: 2,
        focus: function(event, ui) {
            $(id).val(ui.item.value);
            return false;
        },
        select: function(event, ui) {
            $(id).val(ui.item.value);
            return false;
        }
    }); 

这是对我的ASP.net代码中的Web服务调用DeviceSelection.aspx / getDeviceFieldAutocomplete的jQuery AJAX调用。 DeviceSelection.aspx位于http://example.com/DeviceSelection.aspx,因此我认为问题是当用户访问http://example.com/subdirectory/index.aspx并输入查询时,它会尝试在http://example.com/subdirectory/DeviceSelection.aspx调用Web服务。< / p>

我该如何做到这一点?

2 个答案:

答案 0 :(得分:4)

将其更改为:

...
$.ajax({
    url: "/DeviceSelection.aspx/getDeviceFieldAutocomplete",
    data: "{ 'text': '" + escape(request.term) + "', 'field': 'SerialNumber' }",
    dataType: "json",
...

前面的“/”表示URL相对于域(而不是相对于当前页面)。

答案 1 :(得分:2)

  

我们能获得相对于虚拟目录的东西吗?

如果您在URL的代码中<%= Request.ApplicationPath %>并提供绝对路径,该怎么办?类似地,您可以使用客户端解析器来解析路径(我忘记了确切的语法,但它就在那里)