在ASP转发器中设置CheckBox“已检查”属性

时间:2012-08-22 12:56:14

标签: c# asp.net asprepeater

我想知道是否可以设置复选框的检查属性,使用转发器数据源的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。

4 个答案:

答案 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")%>'