Проблема Stringbuilder при создании динамических ссылок - PullRequest
0 голосов
/ 26 января 2010

У меня проблема с созданием ссылки типа "<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>

Я понятия не имею, что я делаю неправильно, он даже делает такую ​​чушь для обычной строки!1010 *

Пожалуйста, помогите!

Ответы [ 5 ]

3 голосов
/ 26 января 2010

Ваш вывод не является действительным 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 голос
/ 26 января 2010

Вот ваш код плюс объявление Stringbuilder, которое я вставил в LINQPad

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.
(источник: angelfire.com )

Кроме того, что вывод не в формате HTML, я не вижу, как мы получаем разные результаты.

EDIT:

Я изменил код для создания формата HTML вместе с обновленной фотографией.

0 голосов
/ 26 января 2010

Использование 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);
0 голосов
/ 26 января 2010

Рассматривали ли вы использование 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 появляются у вас. Исправлены некоторые цитаты.

0 голосов
/ 26 января 2010

Почему бы не попробовать это.

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