0

我在创建链接时遇到问题,例如"<a href="javascript:window.open('www.microsoft.com');">Visit Microsoft</a>使用 stringbuilder。我正在动态地将 html 添加到面板中,并且正在尝试创建一个弹出链接。

问题是由于某种原因链接被“混淆”了。例如:

Dim s As String
sb.Append("<A HREF='javascript:void(0)' onclick='window.open(")
sb.Append("'")
sb.Append("Match.aspx?MatchID=")
sb.Append(mt.MatchID)
sb.Append("&batchid=")
sb.Append(mb.batchID)
sb.Append("')>")
sb.Append("Match</A>")

给出的输出:

<a match.aspx?matchid="28840&amp;batchid=26596')" onclick="window.open(" href="javascript:void(0)">Match</a>

我不知道我做错了什么,它甚至对常规字符串做这种废话!

请帮忙!

4

5 回答 5

3

您的输出不是有效的 HTML:

<A HREF='javascript:void(0)' onclick='window.open('Match.aspx?MatchID=10&batchid=10')>Match</A>

您需要输出此 HTML:

<A HREF="javascript:void(0)" onclick="window.open('Match.aspx?MatchID=10&batchid=10')">Match</A>

怎么样:

Dim s As String
sb.Append("<A HREF=""javascript:void(0)"" onclick=""window.open(")
sb.Append("'")
sb.Append("Match.aspx?MatchID=")
sb.Append(mt.MatchID)
sb.Append("&batchid=")
sb.Append(mb.batchID)
sb.Append("')>""")
sb.Append("Match</A>")

您需要做的是确保输出是有效的 HTML,并且不要将属性引号与 JavaScript 字符串引号混合。

编辑:刚刚注意到这是VB,所以转义字符需要是“”。

于 2010-01-26T05:29:33.787 回答
1

这是您的代码,以及我粘贴到LINQPad中的 Stringbuilder 的声明

Sub Main
Dim sb As New Stringbuilder
Dim s As String
sb.Append("<A HREF=""javascript:void(0)"" onclick=""window.open(")
sb.Append("'")
sb.Append("Match.aspx?MatchID=")
sb.Append("45") 'Used random numbers for MatchID
sb.Append("&batchid=")
sb.Append("45") 'Used random numbers for batchid
sb.Append("')")
sb.Append(""">")
sb.Append("Match</A>")
Console.WriteLine(sb)
End Sub

这就是我得到的

这是我得到的。
(来源:angelfire.com

除了输出不是 HTML 格式外,我看不出我们如何得到不同的结果。

编辑:

我已经更改了代码以生成 HTML 格式以及更新的照片。

于 2010-01-26T05:43:37.077 回答
0

为什么不尝试使用它。

Dim s as string
s = "<A HREF='javascript:void(0)' onclick='window.open('Match.aspx?MatchID=" _
    & mt.MatchID & "&batchid=" & mb.batchID & "')Match</A>"
于 2010-01-26T05:26:41.047 回答
0

您是否考虑过使用 string.Format?

stringToFormat.Format("<A HREF="javascript:void(0)" onclick="window.open('Match.aspx?MatchID={0}&batchid={1}')">Match</A>", mt.MatchID, mb.batchID);

还可以帮助您在此类示例中清楚地查看字符串,并在 HTML 中弹出错误。修正了一些引号。

于 2010-01-26T05:37:25.110 回答
0

像这样使用 sb.Append 有点啰嗦——另一种选择是:

string myHTML = string.Format("<A HREF='javascript:void(0)' onclick='window.open(\"Match.aspx?MatchID={0}&batchid={1}\")'>Match</A>"
              ,mt.MatchID
              ,mb.batchID
             );

注意 onclick() 函数中单引号和双引号的混合使用。

当然,也许更好的方法是声明一个新的 HTML 元素,如下所示:

HtmlLiteral myAnchor = new HtmlLiteral("A");
myAnchor.Attributes.Add("href", "javascript:void(0);");
myAnchor.Attributes.Add("onclick", "my javascript");
...etc...
myPanel.Controls.Add(myAnchor);
于 2010-01-26T05:48:57.457 回答