设置Eval(bool)的选中值

时间:2013-10-04 13:45:51

标签: c# asp.net checkbox

我有一个属性

public bool AutoRenew
{
    get;
    set;
}

在页面中:

<input type="checkbox" checked='<%# Eval("AutoRenew") %>' />

但总是会检查,即使属性值为false

我尝试了以下变体:

<input type="checkbox" checked='<%# Convert.ToBoolean(Eval("AutoRenew")) %>' />
<input type="checkbox" checked='<%# Convert.ToBoolean(Eval("AutoRenew")) == true %>' />
<input type="checkbox" checked='<%# (Boolean)Eval("AutoRenew") %>' />

但没有任何作用,它会继续被检查。表达式应该是什么样的?

编辑:以下是该页面中存在问题的部分:

...
<asp:ListView ID="MyListView" runat="server">
    <LayoutTemplate>
        <table class="ms-listviewtable" style="background-color: White;">
            <tr class="ms-viewheadertr ms-vhltr">
                <th class="ms-vh-icon" scope="col">
                    <input type="checkbox" />
                </th>
                <th class="ms-vh2">
                    <div class="ms-vh-div"><a>Training Item</a></div>
                </th>
                <th class="ms-vh2">
                    <div class="ms-vh-div"><a>Training Task Type</a></div>
                </th>
                <th class="ms-vh2">
                    <div class="ms-vh-div"><a>Due Date</a></div>
                </th>
                <th class="ms-vh2">
                    <div class="ms-vh-div"><a>Auto-Renew</a></div>
                </th>
                <th class="ms-vh2">
                    <div class="ms-vh-div"><a>Training Reason</a></div>
                </th>
            </tr>
            <tr id="itemplaceholder" runat="server"></tr>
        </table>
    </LayoutTemplate>
    <ItemTemplate>
        <tr class="ms-itmhover">
            <td class="ms-vb-itmcbx ms-vb-firstCell">
                <input type="checkbox" class="s4-itm-cbx" />
            </td>
            <td class="ms-vb-title">
                <div class="ms-vb itx"><a><%# Eval("Title")%></a></div>
            </td>
                <td class="ms-vb2">
                    <asp:DropDownList ID="TaskTypeDropDownList" runat="server">
                    </asp:DropDownList>
                </td>
                <td class="ms-vb2"><%# Eval("DueDate")%></td>
                <td class="ms-vb2" style="text-align: center;">
                    <input type="checkbox" checked='<%# Convert.ToBoolean(Eval("AutoRenew")) %>' />
                </td>
                <td class="ms-vb2"><%# Eval("TrainingReason")%></td>
            </tr>
        </ItemTemplate>
        ...

5 个答案:

答案 0 :(得分:21)

您正在使用普通的html复选框

要将数据绑定到palin html复选框,您必须使用checked =“checked”

如果使用ASP.NET Checkbox控件,那么原始代码将顺利运行。

普通html控件和&amp; ASP.NET控制何时绑定数据。

 //for asp.net checkbox
 <asp:CheckBox  ID="IdCheckBox" runat="server" Checked="<%# Convert.ToBoolean(Eval("AutoRenew")) %>"  />

//for plain html checkbox
<input type="checkbox" <%# Convert.ToBoolean(Eval("AutoRenew")) ? "checked" : "" %> />

答案 1 :(得分:3)

所需的输出HTML应该让你顺利:

<input type="checkbox" checked="checked" />
<input type="checkbox" />

这意味着,要不选中该复选框,您根本不应在输出中提及checked属性,甚至不应使用false值。

答案 2 :(得分:2)

如果checkedConvert.ToBoolean(Eval("AutoRenew"))

,请添加true属性
<input type="checkbox" 
  <%# Convert.ToBoolean(Eval("AutoRenew")) ? "checked" : string.Empty %> /> 

答案 3 :(得分:1)

你可以检查Grid_RowDataBound事件中的任何类型值:

aspx:

<asp:GridView ID="GridMain" runat="server" OnRowDataBound="GridMain_RowDataBound">                   
     <Columns>                      
        <asp:TemplateField>
        <ItemTemplate>
                   <asp:CheckBox runat="server" ID="grid_chkbox" Enabled="false" />
                </ItemTemplate
        </asp:TemplateField>                          
     </Columns>              
</asp:GridView>

aspx.cs:

protected void GridMain_RowDataBound(object sender, GridViewRowEventArgs e)
{
  if (e.Row.RowType == DataControlRowType.DataRow)
  {
     //find the checkboxes in the template field.
       CheckBox grid_chkbox= (CheckBox)e.Row.FindControl("grid_chkbox");              

     //find boolean value in current record   
         grid_chkbox.Checked = e.Row.DataItem.boolvalue;
   }
}

答案 4 :(得分:0)

我面临的问题是公认的答案。如果有人正在寻找使asp复选框选中的属性起作用,这是对我有用的代码:

<td><asp:CheckBox ID="chkHasAbility" runat="server"   Checked='<%#bool.Parse(Eval("HasAbility").ToString())%>' /> </td>