有可能改变&到&在LINQ查询的结果?

时间:2009-03-03 20:39:18

标签: vb.net linq

我有以下代码:

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

我可以在将来扩展它以处理其他值。

3 个答案:

答案 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绑定到该数据源。

如果您只需要&

,也可以使用.Replace
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
}