我想知道是否可以设置复选框的检查属性,使用转发器数据源的bool变量?
我尝试了几种方法但没有成功......:
<asp:Repeater ID="rpt" runat="server">
<itemTemplate>
<asp:CheckBox runat="server" CssClass="checkbox"
Checked="<%#Eval("IsDefault").ToString().ToLower()%>"
ID="isDefaultCheckBox"/>
</itemTemplate>
</asp:Repeater>
<asp:Repeater ID="rpt" runat="server">
<itemTemplate>
<asp:CheckBox runat="server" CssClass="checkbox"
Checked="<%# DataBinder.Eval(Container.DataItem, "IsDefault")%>"
ID="isDefaultCheckBox"/>
</itemTemplate>
</asp:Repeater>
IsDefault是类View中的一个字段:
public bool IsDefault
转发器的DataSource是List。
答案 0 :(得分:3)
我很确定它应该以这种方式工作:
Checked='<%# Bind("IsDefault") %>'
顺便说一句,第一种方法中缺少<
:
Checked="%#Eval...
修改:(因为您还编辑了问题并进行了更正)
现在还有其他问题,你在这里连续两次引用:
Checked="<%#Eval("
答案 1 :(得分:3)
另一个解决方案是处理ItemDataBound事件:
<asp:Repeater ID="rpt" runat="server" OnItemDataBound="rpt_ItemDataBound">
<itemTemplate>
<asp:CheckBox runat="server" CssClass="checkbox" ID="isDefaultCheckBox"/>
</itemTemplate>
</asp:Repeater>
...
protected void rpt_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
RepeaterItem ri = e.Item;
var dataItem = ri.DataItem as YourClassOrInterface;
var isDefaultCheckBox = ri.FindControl("isDefaultCheckBox") as CheckBox;
isDefaultCheckBox.Checked = dataItem.IsDefault;
}
答案 2 :(得分:3)
老问题,但我在我的应用程序中使用更简单的东西解决了这个问题:
<asp:CheckBox ID="chkIncludePdf" runat="server" Checked='<%# Eval("DefaultInclude").ToString() == "True" %>' />
答案 3 :(得分:2)
代码的问题实际上是你正在嵌套双引号
Checked="<%# DataBinder.Eval(Container.DataItem, "IsDefault")%>"
应该是
Checked='<%# DataBinder.Eval(Container.DataItem, "IsDefault")%>'