Stringbuilder问题创建动态链接

时间:2010-01-26 05:17:07

标签: asp.net stringbuilder

我在使用stringbuilder创建"<a href="javascript:window.open('www.microsoft.com');">Visit Microsoft</a>之类的链接时遇到问题。我正在动态地向面板添加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>

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

请帮忙!

5 个答案:

答案 0 :(得分: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,因此转义字符必须为“”。

答案 1 :(得分: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

这就是我得到的

Here is what I got. http://www.angelfire.com/ri2/DMX/stringbuilder.jpg

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

编辑:

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

答案 2 :(得分:0)

为什么不尝试使用它。

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

答案 3 :(得分: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中出现错误。修正了一些引用。

答案 4 :(得分: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);