【发布时间】:2014-09-22 21:52:29
【问题描述】:
以下场景:我在我的 Page_Load(内部 (!Page.IsPostBack))中创建了一个 CheckBoxList,然后使用 LINQ 在我的业务逻辑中加载一些数据。生成的数据是具有不同 Value 和 Text 属性的 List,这在我调用该方法的那一刻很好(因为我使用调试器检查了返回变量)。
现在,只要将 List 对象指定为我的 CheckBoxList 的 DataSource,使用调试器我就意识到 CheckBoxList.Items 已经用 Item.Text 属性覆盖了 Item.Value 属性。
所以,我想要的(和生产的)列表包含以下项目,例如:
然而,在我的 CheckBoxList 的 DataBind() 之后,这就是 Items 集合中的 Items 的样子:
这个问题有干净的解决方案吗?我的进一步兴趣是将项目(按值找到)与另一个项目列表(实际上是 SELECTED 项目)进行比较;我认为给 CheckBoxList 一个 ListItems 列表与 Item.Selected 属性将是最干净的方法。不)。
提前感谢您的任何建议!
【问题讨论】:
-
您是否设置了
CheckBoxList的DataValueField和DataTextField属性,以便它知道要映射到值和文本属性的数据源中的哪些字段/属性? -
ListItem的Text返回Value,如果它是null。这同样适用于Value属性,如果它是null,则返回Text。 stackoverflow.com/questions/15396385/… 在这种情况下,似乎只有Text。所以你应该提供代码而不是图像,然后我们可以尝试修复它。 -
Ben Robinson:不,我不是,因为我认为 List
将被映射为匹配 Text/Text 和 Value/Value(这很有意义,对吗?)。问题是这些属性是字符串,那么如何映射 DataValueField 以匹配我的 ListItem 的 Value 属性,以及 DataTextField / Text 属性相同? Tim Schmelter:我确实偶然发现了类似的问题,但在我的情况下,反之亦然——值被文本覆盖。我完全可以提供我的代码,但我觉得这更像是一个逻辑错误。到目前为止,谢谢你们! -
@konrad_pe:如前所述,如果
Value是null而Text不是,则Value会被Text覆盖,反之亦然。 -
@Tim Schmelter:好的,我现在明白了。很抱歉在那个方面很慢。