复选框检查中继器中的值是否为false

本文关键字:是否 false 检查 中继器 复选框 | 更新日期: 2023-09-27 18:21:02

我是ASP.NET的新手。我正在使用一个带有父复选框(User Type)的中继器,在内部我正在使用其他中继器控件来显示User Type Division s。

因为Checkbox Microsoft ASP control没有值,所以我使用html input type checkboxes,因为我需要用javascript和jquery执行任何操作。

我的代码是下一个:

ASPX代码

<%@ Page Language="C#" AutoEventWireup="true" MasterPageFile="~/Admin/Admin.Master"
    CodeBehind="Editar.aspx.cs" Inherits="ELearning.Admin.Cursos.Editar" ValidateRequest="true" %>
<%@ Register Assembly="CKEditor.NET" Namespace="CKEditor.NET" TagPrefix="CKEditor" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
    <title>Editar Curso</title>
    <script type="text/javascript" src="../../js/jquery-1.6.4.min.js"></script>
    <script type="text/javascript" src="../../js/funcionesGenerales.js"></script>
    <script type="text/javascript" src="../../ckeditor/ckeditor.js"></script>
    <script type="text/javascript" src="../../ckfinder/ckfinder.js"></script>
    <script type="text/javascript">
        window.onload = function () {
            //editor = CKEDITOR.replace('editor');
            CKFinder.setupCKEditor(null, '../../ckfinder/');
        }
    </script>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <ajax:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server" EnablePageMethods="true" />
    <h2 class="principalTitle">
        <asp:Label runat="server" ID="lblID"></asp:Label>
    </h2>
    <div>
        <h2>
            Titulo:
            <asp:TextBox runat="server" Width="500px" ID="txtTitulo"></asp:TextBox>
            <asp:RequiredFieldValidator ID="rfTitulo" CssClass="Validator" Text="El campo es obligatorio"
                runat="server" ControlToValidate="txtTitulo"></asp:RequiredFieldValidator>
            <%--<asp:RequiredFieldValidator ID="rfvTitulo" CssClass="Validator" Text="El campo es obligatorio"
                runat="server" ControlToValidate="txtTitulo" />--%>
            <asp:RegularExpressionValidator ID="maxLenTxtTitulo" ControlToValidate="txtTitulo"
                CssClass="Validator" ValidationExpression="('s|.){0,256}$" Text="El titulo es demasiado largo. La longitud máxima es de 256."
                runat="server" />
        </h2>
    </div>
    <div>
        <h2>
            Objetivos:
            <asp:RequiredFieldValidator ID="rfvObjetivos" CssClass="Validator" Text="El campo es obligatorio"
                runat="server" ControlToValidate="heObjetivos" />
        </h2>
        <p>
            <CKEditor:CKEditorControl ID="heObjetivos" Width="862px" runat="server"></CKEditor:CKEditorControl>
        </p>
    </div>
    <div>
        <h2>
            Destinatarios:
            <asp:RequiredFieldValidator ID="rfvDestinatarios" CssClass="Validator" Text="El campo es obligatorio"
                runat="server" ControlToValidate="heDestinatarios" /></h2>
        <p>
            <CKEditor:CKEditorControl ID="heDestinatarios" Width="862px" runat="server"></CKEditor:CKEditorControl>
        </p>
    </div>
    <h2>
        Modalidad del curso
        <asp:RequiredFieldValidator ID="rfvModalidad" CssClass="Validator" Text="El campo es obligatorio"
            runat="server" ControlToValidate="heModalidad" />
    </h2>
    <p>
        <CKEditor:CKEditorControl ID="heModalidad" Width="862px" runat="server"></CKEditor:CKEditorControl>
    </p>
    <h2>
        Tipos de usuario que lo pueden ver</h2>
    <ul>
        <asp:Repeater ID="rptTipoUsuarios" runat="server">
            <ItemTemplate>
                <li class="listItems">
                    <input type="checkbox" id="chkTipoUsuario" class='<%# "chkTipoUsuario-" + DataBinder.Eval(Container.DataItem, "TipoUsuarioId") %>'
                        value='<%# DataBinder.Eval(Container.DataItem, "TipoUsuarioId") %>' runat="server"
                        onclick="seleccionarTodos($(this).is(':checked'), $(this).attr('id'))" />
                    <span id="nombreTipoUsuario" class='<%# "nombreTipoUsuario-" + DataBinder.Eval(Container.DataItem, "TipoUsuarioId") %>'>
                        <%# DataBinder.Eval(Container.DataItem, "Nombre") %>
                    </span>
                    <ul>
                        <asp:Repeater ID="rptDivisiones" runat="server">
                            <ItemTemplate>
                                <li class="listSubItems"><span class='<%# "chkDivision-" + DataBinder.Eval(Container.DataItem, "TipoUsuarioId")%>'>
                                    <input type='checkbox' id="chkDivision" class='<%# "chkDivision-class-" + DataBinder.Eval(Container.DataItem, "DivisionId")%>'
                                        value='<%# DataBinder.Eval(Container.DataItem, "DivisionId") %>' runat="server"
                                        onclick="sumarCheckeo($(this).attr('class'))" />
                                    <%# DataBinder.Eval(Container.DataItem, "Nombre") %>
                                </span></li>
                            </ItemTemplate>
                        </asp:Repeater>
                    </ul>
                </li>
            </ItemTemplate>
        </asp:Repeater>
    </ul>
    <div>
        <h2>
            <span style="display: none">
                <asp:TextBox ID="contadorCheckeos" ClientIDMode="Static" Text="0" runat="server"></asp:TextBox>
                <asp:CheckBox ID="chkAuxOtros" ClientIDMode="static" runat="server" />
            </span>
            <asp:RegularExpressionValidator CssClass="Validator" ID="revChkQuantity" ControlToValidate="contadorCheckeos"
                runat="server" Text="Debe seleccionar al menos 1 division" ValidationExpression="[1-9]*'.?[0-9]*[1-9]">
            </asp:RegularExpressionValidator>
        </h2>
    </div>
    <div>
        <asp:Button runat="server" ID="btnSubmit" Text="Actualizar"></asp:Button>
    </div>
</asp:Content>

背后的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace ELearning.Admin.Cursos
{
    public partial class Editar : System.Web.UI.Page
    {
        private ELearningContextDataContext db;
        private int cursoId;
        private List<DataObject.CursoDivision> cursoDivisiones;
        protected void Page_Load(object sender, EventArgs e)
        {
            DeclararHandlers();
            InicializarConexionDB();
            ((Admin)this.Master).PermitirORedireccionarAdmin();
            Int32.TryParse(Request.QueryString["id"], out cursoId);
             if(!((from p in db.Cursos where p.CursoId == cursoId select p).ToArray().Length > 0))
                 Response.Redirect("Default.aspx");
            if (!Page.IsPostBack)
            {
                CargarColecciones();
                CargarDatos();
            }
        }
        protected void CargarColecciones()
        {
            CargarTiposDeUsuario();
            CargarDivisiones();
        }
        protected void CargarTiposDeUsuario()
        {
            var tipoUsuarios = DataObject.TipoUsuario.ObtenerTodos(db, false);
            rptTipoUsuarios.DataSource = tipoUsuarios;
            rptTipoUsuarios.DataBind();
        }
        protected void CargarDivisiones()
        {
            var divisiones = DataObject.Division.ObtenerTodos(db);
        }
        protected void InicializarConexionDB()
        {
            db = new ELearningContextDataContext();
        }
        protected void DeclararHandlers()
        {
            btnSubmit.Click += new EventHandler(btnSubmit_Click);
            rptTipoUsuarios.ItemDataBound += new RepeaterItemEventHandler(rptTipoUsuarios_ItemDataBound);
        }
        protected void rptTipoUsuarios_ItemCreated(object sender, RepeaterItemEventArgs e)
        {
            RepeaterItem ri = (RepeaterItem)e.Item;
            if (ri.ItemType == ListItemType.Item ||
            ri.ItemType == ListItemType.AlternatingItem)
            {
                Repeater rptDivisiones = (Repeater)ri.FindControl("rptDivisiones");
                rptDivisiones.ItemCreated += new RepeaterItemEventHandler(rptDivisiones_ItemCreated);
            }
        }
        protected void rptTipoUsuarios_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                var chk = (System.Web.UI.HtmlControls.HtmlInputCheckBox)e.Item.FindControl("chkTipoUsuario");
                chk.ID = "chkTipoUsuario-" + e.Item.ItemIndex;
                if (string.Compare(((ELearning.TipoUsuario)(e.Item.DataItem)).Nombre.ToLower(), "otros") == 0)
                {
                    //Ver si se checkeo
                    //Se puede crear un enum para los tipo de usuario y las divisiones
                    Int32.TryParse(Context.Request.QueryString["id"], out cursoId);
                    var query = from p in db.CursoDivisiones where p.CursoId == cursoId && p.DivisionId == 8 select p;
                    if (query.ToArray().Length > 0)
                    {
                        chk.Checked = true;
                        chkAuxOtros.Checked = true;
                    }
                }
                //((System.Web.UI.HtmlControls.HtmlInputCheckBox)chk).Checked = false;
                Repeater ChildRepeater = (Repeater)e.Item.FindControl("rptDivisiones");
                LlenarRepeaterInterno(ChildRepeater, ((ELearning.TipoUsuario)e.Item.DataItem).TipoUsuarioId);
            }
        }
        protected void LlenarRepeaterInterno(Repeater childRepeater, int tipoUsuarioId)
        {
            /*SELECT * FROM Divisiones INNER JOIN TipoUsuarios as tu on tu.TipoUsuarioId =      Divisiones.TipoUsuarioId WHERE Divisiones.TipoUsuarioId = 1 AND tu.Nombre != 'Otros'*/
            var query = (from p in db.Divisiones join q in db.TipoUsuarios on p.TipoUsuarioId equals q.TipoUsuarioId where p.TipoUsuarioId == tipoUsuarioId && string.Compare(q.Nombre.ToLower(), "Otros".ToLower()) != 0 select p).Distinct();
            childRepeater.DataSource = query;
            childRepeater.DataBind();
        }
        protected void btnSubmit_Click(object sender, EventArgs e)
        {
            try
            {
              //CODE FOR SUBMIT
            }
            catch (Exception ex)
            {
                //Manejar excepcion
            }
        }
        protected List<DataObject.CursoDivision> CrearCursoDivision()
        {
            try
            {
                List<DataObject.CursoDivision> divisiones = new List<DataObject.CursoDivision>();
                int divisionId;
                int tipoUsuarioId;
                foreach (RepeaterItem item in rptTipoUsuarios.Items)
                {
                    var checkboxTipoUsuario = (System.Web.UI.HtmlControls.HtmlInputCheckBox)item.FindControl("chkTipoUsuario");
                    Int32.TryParse(checkboxTipoUsuario.Value, out tipoUsuarioId);
                    if (!DataObject.TipoUsuario.esOtros(db, tipoUsuarioId))
                    {
                        Repeater rptDivisiones = (Repeater)item.FindControl("rptDivisiones");
                        if (rptDivisiones != null)
                        {
                            foreach (RepeaterItem itemDivision in rptDivisiones.Items)
                            {
                                var checkbox = (System.Web.UI.HtmlControls.HtmlInputCheckBox)itemDivision.FindControl("chkDivision");
                                if (checkbox.Checked)
                                {
                                    Int32.TryParse(checkbox.Value, out divisionId);
                                    divisiones.Add(new DataObject.CursoDivision(0, divisionId));
                                }
                            }
                        }
                    }
                    else
                    {
                        if (chkAuxOtros.Checked)
                        {
                            var query = db.Divisiones.Single(q => q.TipoUsuarioId == tipoUsuarioId);
                            divisiones.Add(new DataObject.CursoDivision(0, query.DivisionId));
                        }
                    }
                }
                return divisiones;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        protected void CargarDatos()
        {
            try
            {
                Int32.TryParse(Context.Request.QueryString["id"], out cursoId);
                //CKFinder.FileBrowser _fileBrowser = new CKFinder.FileBrowser();
                //_fileBrowser.BasePath = "/ckfinder/";
                //_fileBrowser.SetupCKEditor(null);
                if (!Page.IsPostBack && cursoId != 0)
                {
                    var curso = db.Cursos.Single(p => p.CursoId == cursoId);
                    lblID.Text = string.Format("Editando Curso ID #{0}", cursoId.ToString());
                    txtTitulo.Text = curso.Titulo;
                    heObjetivos.Text = curso.Descripcion;
                    heModalidad.Text = curso.Modalidad;
                    heDestinatarios.Text = curso.Destinatario;
                    var query = from q in db.CursoDivisiones
                                where q.CursoId == cursoId
                                select q.DivisionId;
                    string divisionesSeleccionadas = string.Join(",", query.ToArray());
                    Page.ClientScript.RegisterStartupScript(GetType(), "JSScript", string.Format("tildar('{0}')", divisionesSeleccionadas), true);
                }
                else
                {
                    if (cursoId == 0)
                        Response.Redirect("Default.aspx");
                }
            }
            catch (Exception ex)
            {
                //REdirige hacia pagina de error
            }
        }
    }
}

我的问题是父复选框在Checked属性中始终处于false状态。此外,此页面无法正确执行验证操作。当我在Firebug控制台写验证时,asp函数也返回true状态。

哪些可能是问题?

提前感谢

复选框检查中继器中的值是否为false

最后,我使用一个简单的html输入标记来添加onservrclick属性的复选框。

因此没有必要进行自动备份。

谢谢,对不起。

接受评论中的建议。