根据您更新的问题,我将对您的理解做出潜在错误的假设。
我猜你正在查看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