2009-12-28 45 views
1

我有這行代碼構成的HTML字符串:問題構建HTML在C#

StringBuilder builder = new StringBuilder(); 
builder.Append("<a href='#' onclick="); 
builder.Append((char)22); //builder.Append('\"'); 
builder.Append("diagnosisSelected('" + obj.Id + "', '" +obj.Name + "')"); 
builder.Append((char)22); 
builder.Append(" >" + obj.Name + "</a>"); 

在瀏覽器中,我得到

<a href='#' onclick=\"diagnosisSelected('id', 'text')\" >some text here</a> 

和我是因爲一個錯誤\「。我怎樣才能輸出一個」?

+2

我覺得你麻煩的是,'」'有ASCII值0×22(十六進制),而不是22(十進制)。 – 2009-12-28 18:58:32

+1

diagn.Name的值是什麼給出的輸出?我的第一個猜測是「文本」,但這與鏈接文本看起來不一致。你確定這段代碼正在運行嗎? – 2009-12-28 18:59:22

+0

問題出在IE :) – CoffeeCode 2009-12-30 15:28:58

回答

11

有趣的是,有多少次我看到人們使用StringBuilder,但完全錯過了寶他們的整數。還有另一種方法上的StringBuilder稱爲AppendFormat,這將幫助你很多在這裏:

builder.AppendFormat("<a href='#' onclick=\"foo('{0}','{1}')\">{2}</a>", var1, var2, var3); 

希望這有助於

+2

或@「​​」,如果反斜槓對你來說看起來和你一樣愚蠢。 – 2009-12-28 19:07:04

+0

我不是一個雙倍報價的粉絲,因爲它太惹惱了resharper :) – x0n 2009-12-28 19:35:07

+0

當目標是在當前「構建器」字符串值的末尾插入格式化字符串時,AppendFormat非常有用,但該怎麼做插入格式化字符串的開始? 我使用builder.insert(0,str),所以在這種情況下如何添加str作爲格式化的html字符串? – 2017-01-02 17:55:49

2

在雙引號字符串中,\是一個轉義字符。要插入一個",您可以使用"\""

5

使用\」

行情是特殊字符,所以他們必須‘轉義’通過把一個反斜槓在他們面前。的

即代替

builder.Append((char)22); 

使用

builder.Append("\""); 
+0

將字符串作爲Json傳遞,結果仍然是「,並且在追加」 – CoffeeCode 2009-12-28 19:04:10

+0

時出現同樣的錯誤「。在這種情況下,可能是在構建字符串和發射它到輸出HTML是'轉義'你的報價。如果您發佈用於輸出文本的代碼,以便人們可以嘗試查看可能會被轉義的位置,這可能是最好的選擇。 – 2009-12-28 20:50:59

1

替換以下行:

builder.Append((焦炭)22);

builder.Append( 「\」 「);