【问题标题】:ASP.NET Checkbox not being checked未选中 ASP.NET 复选框
【发布时间】:2017-11-17 13:16:20
【问题描述】:

我会尽力解释它,因为这个问题可能是我发现的最罕见的问题。

我有一个扩展 asp.net GridView 功能的控件。在其中,我有以下两列:

<asp:TemplateField HeaderText="Enviado GesDoc">

    <ItemTemplate>
        <asp:CheckBox ID="chkEnviadoGesDoc" runat="server" />
    </ItemTemplate>
    <ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>
<asp:TemplateField HeaderText="Enviado GesDoc2">
    <ItemTemplate>
        <asp:CheckBox ID="chkEnviadoGesDoc2" runat="server" />
    </ItemTemplate>
    <ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>

如您所见,两个 ItemTemplate 是相同的。我没有在解决方案的任何部分引用它们,而是在 row_dataBound 事件后面的代码中引用它们。在此方法中,我对两个文本框执行以下操作:

chk = e.Row.FindControl("chkEnviadoGesDoc") as CheckBox;
    if (chk != null)
    {
        chk.Enabled = false;
        chk.Checked = (rowData["REI_ENVIO_GESDOC"].ToString().Contains("S"));
    }

    chk = e.Row.FindControl("chkEnviadoGesDoc2") as CheckBox;
    if (chk != null)
    {
        chk.Enabled = false;
        chk.Checked = (rowData["REI_ENVIO_GESDOC"].ToString().Contains("S"));

    }

这是我在网上得到的结果:

毫无意义。如果我检查代码,即使未标记复选框,它们也具有“已检查 = 已检查”的属性。例如,如果我在第一个 ItemTemplate 之前添加一列:

<asp:TemplateField HeaderText="YouText">
    <ItemTemplate>
        Prueba
    </ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Enviado GesDoc">
    <ItemTemplate>
        <asp:CheckBox ID="chkEnviadoGesDoc" runat="server" />
    </ItemTemplate>
    <ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>
<asp:TemplateField HeaderText="Enviado GesDoc2">
    <ItemTemplate>
        <asp:CheckBox ID="chkEnviadoGesDoc2" runat="server" />
    </ItemTemplate>
    <ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>

现在结果是:

如果我检查 HTML,这里是选中的复选框和未选中的复选框的 HTML:

<input name="ctl00$ContentPlaceHolder1$TabContainer1$TabPanel1$SeguimientoInterfaces$GrdInterfaces$ctl08$chkEnviadoGesDoc" disabled="disabled" id="ContentPlaceHolder1_TabContainer1_TabPanel1_SeguimientoInterfaces_GrdInterfaces_chkEnviadoGesDoc_6" type="checkbox" checked="checked">
<input name="ctl00$ContentPlaceHolder1$TabContainer1$TabPanel1$SeguimientoInterfaces$GrdInterfaces$ctl08$chkEnviadoGesDoc2" disabled="disabled" id="ContentPlaceHolder1_TabContainer1_TabPanel1_SeguimientoInterfaces_GrdInterfaces_chkEnviadoGesDoc2_6" type="checkbox" checked="checked">

如果我手动删除检查并再次检查,则检查有效:

jQuery("#ContentPlaceHolder1_TabContainer1_TabPanel1_SeguimientoInterfaces_GrdInterfaces_chkEnviadoGesDoc2_6").attr("checked", "")
jQuery("#ContentPlaceHolder1_TabContainer1_TabPanel1_SeguimientoInterfaces_GrdInterfaces_chkEnviadoGesDoc2_6").attr("checked", "checked")

如您所见,没有一个复选框被选中,即使它们在 html 中设置了属性。

如果我在两个相同的列中间添加这个“TestColumn”,那么它们可以正常工作:

<asp:TemplateField HeaderText="Enviado GesDoc">
    <ItemTemplate>
        <asp:CheckBox ID="chkEnviadoGesDoc" runat="server" />
    </ItemTemplate>
    <ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>
<asp:TemplateField HeaderText="YouText">
    <ItemTemplate>
        Prueba
    </ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Enviado GesDoc2">
    <ItemTemplate>
        <asp:CheckBox ID="chkEnviadoGesDoc2" runat="server" />
    </ItemTemplate>
    <ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>

我在运行代码时没有遇到任何异常。 Html 对于复选框标记有勾号和没有勾号的情况是相同的。我不知道什么会导致这种行为。如果您有任何问题,请分享并帮助我。

谢谢

【问题讨论】:

  • 测试了你的代码。它工作正常。即使中间没有额外的列,这两个复选框也会被选中。您是否尝试过不同的浏览器和/或复选框是否由引导程序和/或 css 和 javscript 设置样式?也许这就是问题所在。
  • @VDWWD 如果我切换到普通的 GridView,它也可以正常工作,但我使用的是扩展 GridView 功能的自定义 GridView
  • 那么错误就在扩展的某处。但是没有人可以测试它,因为它不在您的问题中。
  • @VDWWD 我无法发布完整的扩展代码。我在问是否有人能猜出这种行为会出什么问题,我知道这很复杂,但我必须尝试

标签: c# asp.net gridview checkbox


【解决方案1】:

问题自己解决了。 javascript中有一个函数将checked属性手动设置为false(而不是使用attr函数),这就是为什么我的复选框在没有检查的情况下显示,但在html中仍然有“checked” attr。

此函数的内部编码导致在复选框列之间或之前添加文本列时出现奇怪的行为。

【讨论】:

    猜你喜欢
    • 2011-12-11
    • 1970-01-01
    • 2012-09-11
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-29
    相关资源
    最近更新 更多