0

我遇到了一个 javascript 错误,这让我很头疼。我正在尝试使用 javascript 创建一个模态弹出窗口。我正在使用的 javascript 代码是:

function OpenModalDialogCredit(RRID, SLA_Bucket, AccountNum) {
    var vReturnValue;
    var AccountNo = new String();
    AccountNo = AccountNum.toString();
    var url = "RR_Txn_Detail.aspx?RRID=" + RRID + "BucketID=" + SLA_Bucket +
        "AccNum=" & AccountNum;
    if(url != null) {
        vReturnValue = window.showModalDialog(
            "Risk_Report_Weekly_Txn_Detail.aspx?RRID=" + RRID +
            "&BucketID=" +
            SLA_Bucket + "&AccNum=" + AccountNum + "&DtCt=" + 2, '',
            'dialogWidth:800px,dialogHeight:1200px,scroll:1,center:yes;unadorned:yes',
            'screenx=100', 'screeny=100');
    } else {
        alert("No URL passed to open");
    }
}

上面的代码在 AccountNum 是数字时有效,但是当 AccountNum 有字母和数字时,我收到一条错误消息:SCRIPT5009: 'NAD197005601' is undefined。现在'NAD197005601'是传递给函数的AccountNum参数,但由于某种原因它说它未定义。

请帮我。

谢谢

4

1 回答 1

1

在您发布的评论中,您看到

javascript:OpenModalDialogCredit(10, 37, NAD197005601)

大概是页面上的 URL。这里的问题是您没有引用您传入的值,这意味着 JavaScript 将其视为变量而不是字符串值。您需要改用(或在您的 ASP.NET 中生成):

javascript:OpenModalDialogCredit(10, 37, 'NAD197005601')

使用单引号或双引号。

如果您使用简单的字母数字值,那么您可以将引号字符添加到任一端,但如果有任何其他字符的可能性(特别是如果这是用户提供的输入),那么您需要正确转义该值。这是它变得稍微复杂的地方:您实际写入页面的是 HTML 属性中的带引号的字符串,因此您可以选择是使用 JavaScript 提供的转义还是 HTML 提供的特殊字符转义,但是您无论哪种方式,都需要首先对被解释为 JavaScript\字符串转义(\n等)的值进行转义。你肯定需要逃避任何'字符串中的字符,以避免 JavaScript 将它们解释为允许脚本注入的字符串结束值标记。因此,您需要更换

  • \\\
  • '\'

在将字符串从 C# 发送到 HTML 之前按该顺序排列。唉,我不知道有任何图书馆会为你做这件事。

如果页面上有 jQuery,那么您可以执行其他操作,例如,您可以将三个值作为 HTML 中的数据属性(在此或适当的父元素上)发出,然后编写脚本来绑定单击事件以从中查找正确的元素,然后进行调用。这将允许您仅将值编写为 HTML 属性,节省一些转义(但不是全部转义!),并且可能允许您使用 ASP.NET 的标记生成代码来获得正确的结果。但是,如果您对 JavaScript 还不熟悉,那可能有点野心勃勃。

于 2013-10-15T13:42:43.320 回答