【问题标题】:Setting checked value for Eval(bool)为 Eval(bool) 设置检查值
【发布时间】:2013-10-11 13:09:49
【问题描述】:

我有财产

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>
        ...

【问题讨论】:

  • 让我记住了一点...“checked”是不需要值的属性之一,但为了使其符合标准,使用了checked='checked'。并且任何值都会评估为“真”。
  • 检查我的更新答案...

标签: c# asp.net checkbox


【解决方案1】:

所需的输出 HTML 应该可以帮助您:

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

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

【讨论】:

    【解决方案2】:

    如果Convert.ToBoolean(Eval("AutoRenew"))true,则添加checked 属性

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

    【讨论】:

    • @Boris,很高兴听到这个消息
    【解决方案3】:

    您正在使用纯 HTML 复选框

    要将数据绑定到纯 HTML 复选框,您必须使用 checked="checked"

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

    普通 HTML 控件和 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" : "" %> />
    

    【讨论】:

    • 它适用于asp:CheckBox,但我仍然不明白为什么即使我使用@Satpal 的代码仍然会检查它。
    • 我在示例页面上试过了, />, />,这两个条件都很好。你能发布更多细节吗
    • @Boris :因为即使 也会将复选框标记为选中,请检查 Mr47 的回答
    • 你的答案 hny :* jigareto @Nikhil Chavan
    • 有CheckBoxList应该怎么写?
    【解决方案4】:

    您可以在 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;
       }
    }
    

    【讨论】:

      【解决方案5】:

      我遇到了接受答案的问题。如果有人正在寻找让 asp 复选框选中的属性工作,这里是对我有用的代码:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-09
        • 1970-01-01
        相关资源
        最近更新 更多