我有以下代码:
Dim db As New linqclassesDataContext
Dim categories = (From c In db.faq_cats)
NewFaqDropDownCategory.DataSource = categories
NewFaqDropDownCategory.DataTextField = "category"
NewFaqDropDownCategory.DataValueField = "category_id"
If Not Page.IsPostBack Then
NewFaqDropDownCategory.DataBind()
End If
Unset(categories)
Unset(db)
“类别”列下的其中一个项目标题中包含&
,并且会在下拉列表中显示。有没有办法使列表显示“&”代替?
我想我可以使用.Replace()函数来做到这一点,我不小心发现了:
For Each c In categories
If c.category.Contains("&") Then
c.category = c.category.Replace("&", "&")
End If
Next
我可以在将来扩展它以处理其他值。
答案 0 :(得分:1)
如果还有其他HTML编码字符,您可以使用HttpUtility.HtmlDecode(c.category)
。这将阻止您的替换,并确保正确解码任何字符。
我不知道这是否是VB linq匿名对象语法,但我试过了。
Dim datasource = From categories In db.faq_cats _
Select New With { .category = HttpUtility.HtmlDecode(categories.category), .category_id = categores.category_id }
然后将DDL绑定到该数据源。
如果您只需要&
Dim datasource = From categories In db.faq_cats _
Select New With { .category = categories.category.Replace("&", "&"), .category_id = categores.category_id }
答案 1 :(得分:1)
“类别”栏目下的其中一项有& amp; amp; amp; amp; amp;在标题中
如果那& amp; 确实应该是'&',我建议您的数据库需要清理才能使其成为一个。通常,您总是希望数据库中包含纯文本; HTML转义不应该发生在最终的输出到页面阶段。
在编码的不同阶段存储数据令人困惑,并且可能会带来危险;在另一个方向上获得错误的编码级别,并且您有跨站点脚本攻击。
答案 2 :(得分:0)
我建议你做.ToList(),然后有一个Select来抓住它做.Replace()
做ToList的原因是将它作为内存,从那时起你不再局限于sql上存在的构造。我不知道vb.net的语法,但在c#中,select会看起来像:
new {
category = c.category.Replace("&", "&"),
c.category_id
}