0

我的 ASP.NET Web 应用程序包含一个 JavaScript 函数,该函数将 50 个图像从数据库加载到页面上;用户可以导航到上一页或下一页,或从下拉列表中选择特定页面。

通常,它按预期工作,但发生了一件奇怪的事情:在我使用下拉菜单更改页码后,如果我然后选择下一步按钮,它不会将页码加 1;相反,它将当前页码视为字符串并在其上附加 1。(例如,从 2 到 21,从 10 到 101。)上一个按钮正常工作,如果紧跟在上一个或下一个按钮之后使用,下一个按钮可以工作 - 它只是使用下拉列表的特定组合然后是有问题的下一个按钮。

这是有问题的代码:

function getPageOfPhotos(PageNumber) {
    $.ajax({
        type: "GET",
        url: "/PhotoManager.svc/GetSomePhotos",
        data: {"PageNumber": PageNumber},
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            ButtonsString = '<table><tr>'

            ButtonsString += '<td><div style="text-align:center"><input type="button" value="Prev Page" '
                           + 'onclick="getPageOfPhotos(' + (PageNumber - 1).toString() + ')"'
                           + (PageNumber < 2 ? ' disabled' : '')
                           + ' /></div></td>';
            ButtonsString += '<td><div style="text-align:center">Go To Page: '
                           + '<select id="GoTo_Page" onchange="getPageOfPhotos(this[this.selectedIndex].value)">';
            for (N = 1; N <= Math.ceil(ThumbnailCount / 50); N++) {
                ButtonsString += '<option value="' + N.toString() + (N == PageNumber ? '" selected' : '" ') + '>' + N.toString() + '</option>';
            }
            ButtonsString += "</select></td>";

            ButtonsString += '<td><div style="text-align:center"><input type="button" value="Next Page" '
                           + 'onclick="getPageOfPhotos(' + (PageNumber + 1).toString() + ')"'
                           + (PageNumber * 50 >= ThumbnailCount ? ' disabled' : '')
                           + ' /></div></td>';

            ButtonsString += '</tr></table>';
            for (var D in data) {
                // Code that uses the photos themselves snipped
            }
        },
        error: function (HelpRequest, ErrorCode, TheError) {
            ButtonsString = "Error getting thumbnails:<br />" + TheError;
        },
        async: false
    });
    $(ButtonsDiv).html(ButtonsString);
}

问题似乎与:

'onclick="getPageOfPhotos(' + (PageNumber + 1).toString() + ')"'

PageNumber 应该是一个整数,但 (PageNumber + 1) 被视为 (PageNumber.ToString() + "1")。改成(1 + PageNumber)也有同样的问题,只不过1出现在前面(所以第3页跳转到第13页而不是第4页或第31页);将其更改为 (PageNumber * 1 + 1) 使其正常工作。

这是一个已知的错误,还是我的代码中缺少某些内容?请注意,它对 IE 和 Firefox 都执行此操作。

4

2 回答 2

1

字符串连接的工作方式不是错误。

将字符串转换为数字

parseInt(PageNumber,10) + 1
于 2013-11-14T21:02:06.767 回答
0

放:

PageNumber = parseInt(PageNumber, 10);

在函数的开头。

您说页码来自下拉列表。下拉列表的值始终是一个字符串,即使它看起来是数字。

于 2013-11-14T21:05:04.170 回答