【发布时间】: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