根據您更新的問題,我將對您的理解做出潛在錯誤的假設。
我猜你正在查看HTML源代碼,並不理解爲什麼字符串編碼在一個地方,而在另一個地方未編碼。解釋很簡單:服務器端控件自動編碼其內容,而Response.Write
寫入原始輸出。這是有原因的:服務器端控件通常包含用戶輸入,這固有地是不安全,所以它被自動編碼以防止cross-site scripting attacks,或者在不太危險的情況下,用戶輸入僅僅是打破你的頁面。
舉例來說,想象一下,如果列表沒有編碼的內容和你這樣做:
ddAdulti.Items.Add(new ListItem("</select>", ""));
ddAdulti.Items.Add(new ListItem("An actual valid value", ""));
最終的結果將是你的標記會是這個樣子:
<select>
<option></select></option>
<option>An actual valid value</option>
</select>
正如你所看到的那樣,這顯然已經壞了。最終結果取決於解釋瀏覽器,但很可能是一個空白的下拉列表。
現在,由於控制做編碼的內容,標記結束是:
<select>
<option></select></option>
<option>An actual valid value</option>
</select>
和工作的事情出很好。 :-)
[編輯]
它發生,我認爲從我的例子,它可能不是很清楚,爲什麼你看到與像「A」向人物的行爲。這是因爲許多字符編碼不支持混淆字母,因此對於控制編寫者來說,簡單地對7位ASCII字符集之外的所有字符進行編碼可能是最容易的。 :-)
[編輯2]
現在越來越清楚,我認爲原來的職位並沒有提供真正的問題。顯然,markzzz試圖做的是從數據庫中取未編碼的HTML,並按照原樣顯示給客戶端。已經存在一個WebForms控件來執行此操作:LiteralControl
。它會顯示任何你堅持的內容,未經編碼。
也就是說,我不知道如何嵌入DropDownList
的內部 - 請參閱我對解析HTML呈現方式的解釋。但是,如果您只想顯示項目列表,但不一定是下拉列表,則可以在Repeater
或某些類似內部使用LiteralControl
。
on HTML!呃... HtmlDecode的功能應該是一樣的:O爲什麼兩個不同的解碼?這是我的問題!刪除它不是解決方案(也因爲它做了另一種編碼,結果將是選擇下拉選項中的字符) – markzzz 2012-01-27 15:34:49
我相當肯定你只是做出了一個不正確的假設這裏。嘗試將HtmlDecode的結果分配給一個變量並將其傳遞給Response.Write和ListItem ctor,並且您可能會看到相同的結果,在這種情況下,罪魁禍首就在其他地方。 – Rytmis 2012-01-27 15:39:13
作爲一種證明我的觀點的方法,我創建了一個示例應用程序,並將您的代碼粘貼到頁面的Page_Init函數中:http://postimage.org/image/l7598yb4h/正如您所看到的,結果對於兩個下拉列表和Response.Write。 – Rytmis 2012-01-27 15:42:39