2017-06-15 3 views
1

Ich werde versuchen, es so gut wie möglich zu erklären, denn dieses Problem ist vielleicht das seltenste, was ich gefunden habe.ASP.NET Checkbox wird nicht überprüft

Ich habe ein Steuerelement, das die Funktionalität von asp.net GridView erweitert. Innen ist es, habe ich die folgenden zwei Spalten:

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

Wie Sie sehen können, beide ItemTemplates identisch sind. Ich referenziere sie in keinem Teil der Lösung, sondern im Code hinter dem row_dataBound-Ereignis. Innerhalb dieser Methode gehen Sie wie folgt ich das für beide Textfelder:

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")); 

    } 

Dies ist das Ergebnis, das ich auf dem Netz erhalten:

enter image description here

Senseless. Wenn ich den Code überprüfe, auch wenn die Checkboxen nicht markiert sind, haben sie die Eigenschaft "checked = checked". Wenn ich zum Beispiel eine Spalte vor dem ersten ItemTemplate hinzufügen:

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

Jetzt ist das Ergebnis:

enter image description here

Wenn ich die HTML inspizieren, hier ist der HTML-Code für die geprüfte chebox und die uncheked ein:

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

Wenn ich manuell das Kontroll entfernen und erneut prüfen, die Prüfung funktioniert:

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

Wie Sie sehen, ist keines der Kontrollkästchen aktiviert, auch wenn die Eigenschaft in html festgelegt ist.

Wenn ich dieses „TestColumn“ in Mitte meiner beiden identischen Spalten hinzufügen, dann arbeiten sie richtig:

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

enter image description here

ich keine Ausnahme, während der Code ausgeführt wird. Html ist das gleiche für den Fall, wenn das Kontrollkästchen mit dem Häkchen markiert ist und wenn es nicht markiert ist. Ich habe keine Ahnung, was dieses Verhalten verursachen kann. Wenn Sie irgendwelche haben, teilen Sie es bitte und helfen Sie mir.

Vielen Dank

+0

Getestet wurde der Code. Es funktioniert gut. Beide Checkboxen werden auch ohne eine zusätzliche Spalte dazwischen geprüft. Haben Sie einen anderen Browser probiert und/oder sind die Checkboxen von einem Bootstrapper und/oder css und javscript gestylt? Vielleicht liegt da das Problem. – VDWWD

+0

@VDWWD Es funktioniert gut für mich auch, wenn ich zu normalen GridView wechseln, aber ich benutze eine benutzerdefinierte GridView, GridView-Funktionalität erweitert –

+0

Dann ist der Fehler irgendwo in der Erweiterung. Aber niemand kann das testen, da es nicht in Ihrer Frage ist. – VDWWD

Antwort

0

Frage wurde selbst gelöst. Es gab eine Funktion in JavaScript Einstellung Eigenschaft manuell auf falsch (stattdessen mit Attr-Funktion), deshalb wurde meine Checkbox ohne Prüfung angezeigt, aber immer noch die "aktiviert" Attr in HTML.

Die interne Codierung dieser Funktion führte zu merkwürdigen Verhaltensweisen beim Hinzufügen einer Textspalte zwischen den Kontrollkästchen oder davor.

Verwandte Themen