Que tal amigos del foro. Les comento que soy nuevo en esto del web y tengo muchos errores y vacios en cuanto a lo que es programar en AJAX. Estoy usando Visual Studio 2005 y tengo las extensiones de Ajax y Ajax Control Toolkit. Pues bien mi problema es que tengo una pagina aspx en la que tengo algunos update panel para refresacar solo ciertas zonas de mi pagina. En fin tengo algunos problemas entre ellos les comento:
1. Tengo un RadioButtonList en el cual al hacer click sobre sus items, tengo de habilitar o deshabilitar un conjunto de controles que se encuentran dentro de un groupbox y todo ello a su vez esta dentro de un UpdatePanel. El problema es que cuando hago click sobre el radio button de "habilitar" el grupo de controles se habilita y AJAX funciona perfecto, pero cuando seguidamente hago click sobre el radioButton de "deshabilitar", pues no lo hace. Tengo que que hacer click sobre otro boton incluso dentro de otro updatePanel y ahi se deshabilita elconjunto de controles. NO se lo que pasa si debo configurar el update panel de alguna manera o que es lo que esta mal.
2. Tengo de igual forma un grupo de botones asp, los cuales estan dentro de un UpdatePanel para que la accion que realizen se ejecute sin necesidad de postback. EL problema es que al hacer click sobre un boton "Guardar" que esta dentro de un updatePanel y me ejecuta ciertos procedimientos dentro de su evento "OnClick", realiza los procedimientos pero tengo uno en el cual deshabilita todos los controles del formulario cuando termina de realizar el guardado de la informacion,pero en la pantalla eso no se refleja. Intente poner todos los controles dentro de un UpdatePanel pero como tengo controles de validacion, me da errores. Que puedo hacer con estos problemas. por favor es urgente su ayuda. Diganme cualquiera que este haciendo mal o de que otra forma puedo hacer esto. Cabe decir que esto es una aplicacion web y no un sitio web.
Aqui les envio el codigo de mi pagina aspx, y el codebehind de la misma:
NOta: Los checkboxlist que tengoson de una libreria que los hacia mutuamente excluyentes, pero no estan siendo usados con ajax.
categoria_electoral.aspx
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@ Page Language="VB" AutoEventWireup="true" CodeFile="categoria_electoral.aspx.vb" Inherits="categoria_electoral" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
<%@ Register Assembly="CheckBoxListRequiredFieldValidator" Namespace="Fortunate.Web"
TagPrefix="cc2" %>
<html dir="ltr" xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<link rel="stylesheet" type="text/css" href="../styles/controlesFormulario.css" />
<link href="../styles/cuadrosDialogo.css" rel="stylesheet" type="text/css" />
</head>
<body>
<form id="form1" runat="server">
<asp:Label runat="server" Text="Categoría Electoral" id="Label1" CssClass="tituloForm">
</asp:Label> <br />
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<br />
<asp:Label runat="server" Text="Nombre:" id="Label2" CssClass="labels">
</asp:Label>
<asp:TextBox runat="server" id="txtNombre" CssClass="cuadrosTextoRadioCombos" MaxLength="60"></asp:TextBox>
<asp:RequiredFieldValidator ID="rfvNombre" runat="server" ControlToValidate="txtNombre"
ErrorMessage="*" CssClass="labels" SetFocusOnError="True"></asp:RequiredFieldValidator>
<cc1:FilteredTextBoxExtender ID="FilteredTextBoxExtender1" runat="server" TargetControlID="txtNombre" FilterType="Custom" ValidChars="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZáéíóúÁÉÍÓÚ ">
</cc1:FilteredTextBoxExtender>
<br />
<asp:Label runat="server" Text="Dignidades a elegirse:" id="Label17" CssClass="labels">
</asp:Label>
<cc2:CheckBoxListRequiredFieldValidator ID="rfvDignidades"
runat="server" ControlToValidate="cblDignidades" ErrorMessage="*"></cc2:CheckBoxListRequiredFieldValidator>
<asp:CheckBoxList runat="server" id="cblDignidades" CssClass="cuadrosTextoRadioCombos" TabIndex="1">
</asp:CheckBoxList>
<br />
<asp:Label runat="server" Text="Participantes:" id="Label3" CssClass="labels">
</asp:Label>
<cc2:CheckBoxListRequiredFieldValidator ID="rfvPerfiles"
runat="server" ControlToValidate="cblPerfiles" ErrorMessage="*"></cc2:CheckBoxListRequiredFieldValidator>
<asp:CheckBoxList ID="cblperfiles" runat="server" CssClass="cuadrosTextoRadioCombos" TabIndex="2">
</asp:CheckBoxList> <br />
<asp:Label runat="server" Text="Género:" id="Label7" CssClass="labels">
</asp:Label>
<cc2:CheckBoxListRequiredFieldValidator ID="rfvGenero" runat="server" ControlToValidate="cblGenero"
ErrorMessage="*"></cc2:CheckBoxListRequiredFieldValidator><br />
<asp:CheckBoxList ID="cblGenero" runat="server" CssClass="cuadrosTextoRadioCombos" TabIndex="3">
<asp:ListItem>Masculino</asp:ListItem>
<asp:ListItem>Femenino</asp:ListItem>
</asp:CheckBoxList> <br />
<asp:Label runat="server" Text="Tipo de Voto:" id="Label4" CssClass="labels"></asp:Label>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="rblTipoVoto"
ErrorMessage="*"></asp:RequiredFieldValidator><br />
<asp:RadioButtonList ID="rblTipoVoto" runat="server" CssClass="cuadrosTextoRadioCombos" OnSelectedIndexChanged="rblTipoVoto_SelectedIndexChanged" AutoPostBack="True" TabIndex="4">
<asp:ListItem Selected="True">No ponderado</asp:ListItem>
<asp:ListItem>Ponderado</asp:ListItem>
</asp:RadioButtonList>
<br />
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Panel ID="pnlParametrosCalculoPonderado" runat="server" GroupingText="Parámetros Cálculo Ponderado"
Height="48px" Width="716px" BackColor="White" Enabled="False" CssClass="subtitulos">
<br />
<asp:Label runat="server" Text="Valor voto Profesor:" id="Label5" CssClass="labels">
</asp:Label>
<asp:Label runat="server" Text="100" id="lblValorVotoProfesor" CssClass="cuadrosTextoRadioCombos"></asp:Label>
<asp:Label ID="Label6" runat="server" CssClass="cuadrosTextoRadioCombos" Text="%"></asp:Label>
<br />
<asp:Label runat="server" Text="Valor voto Estudiante:" id="Label8" CssClass="labels">
</asp:Label>
<asp:Label runat="server" Text="(" id="Label12" CssClass="cuadrosTextoRadioCombos">
</asp:Label>
<asp:TextBox runat="server" id="txtPorcentajeVotoEstudiante" Width="35px" CssClass="cuadrosTextoRadioCombos" TabIndex="5"></asp:TextBox>
<asp:Label runat="server" Text="% * # Profesores ) / # Estudiantes" id="Label11" CssClass="cuadrosTextoRadioCombos">
</asp:Label>
<asp:CustomValidator ID="cvRequieredValorPorcentajeEstudiante" runat="server" ControlToValidate="txtPorcentajeVotoEstudiante"
CssClass="labels" ErrorMessage="*" OnServerValidate="cvRequieredValorPorcentajeEstudiante_ServerValidate"
ValidateEmptyText="True"></asp:CustomValidator>
<cc1:FilteredTextBoxExtender ID="FilteredTextBoxExtender2" runat="server" TargetControlID="txtPorcentajeVotoEstudiante" FilterType="Custom" ValidChars ="1234567890,.">
</cc1:FilteredTextBoxExtender>
<br />
<asp:Label runat="server" Text="Valor voto Empleado:" id="Label13" CssClass="labels">
</asp:Label>
<asp:Label runat="server" Text="(" id="Label15" CssClass="cuadrosTextoRadioCombos">
</asp:Label>
<asp:TextBox runat="server" id="txtPorcentajeVotoEmpleado" Width="35px" CssClass="cuadrosTextoRadioCombos" TabIndex="6"></asp:TextBox>
<asp:Label runat="server" Text="% * # Profesores ) / # Empleados" id="Label16" CssClass="cuadrosTextoRadioCombos">
</asp:Label>
<asp:CustomValidator ID="cvRequieredValorVotoEmpleado" runat="server" ControlToValidate="txtPorcentajeVotoEmpleado"
CssClass="labels" ErrorMessage="*" OnServerValidate="cvRequieredValorVotoEmpleado_ServerValidate"
ValidateEmptyText="True"></asp:CustomValidator><br />
<asp:CustomValidator ID="cvValorVotoEstudiante" runat="server" ControlToValidate="txtPorcentajeVotoEstudiante"
CssClass="labels" ErrorMessage='El valor especificado en el campo "Valor voto estudiante" no es válido'
OnServerValidate="cvValorVotoEstudiante_ServerValidate"></asp:CustomValidator><br />
<asp:CustomValidator ID="cvValorVotoEmpleado" runat="server" ControlToValidate="txtPorcentajeVotoEmpleado"
ErrorMessage='El valor especificado en el campo "Valor voto empleado" no es válido' OnServerValidate="cvValorVotoEmpleado_ServerValidate" CssClass="labels"></asp:CustomValidator></asp:Panel>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="rblTipoVoto" EventName="SelectedIndexChanged" />
</Triggers>
</asp:UpdatePanel>
<br />
<br />
<table> <tr> <td style="width: 55px; height: 152px;" valign="top"><asp:Button ID="cmdNuevo" runat="server" CssClass="botones" Text="Nuevo" CausesValidation="False" /> </td> <td style="height: 152px; text-align:justify " align="left" valign="top" >
<asp:UpdatePanel ID="UpdatePanel2" runat="server">
<ContentTemplate>
<asp:Button runat="server" Text="Editar" id="cmdEditar" /><asp:Button runat="server" Text="Guardar" id="cmdGuardar" CssClass="botones" /><asp:Button runat="server" Text="Eliminar" id="cmdEliminar" OnClick="cmdEditar_Click" CausesValidation="False" /><asp:Button runat="server" Text="Cancelar" id="cmdCancelar" CssClass="botones" CausesValidation="False" />
</ContentTemplate>
</asp:UpdatePanel>
</td></tr></table>
<br />
</form>
</body>
</html>
categoria_electoral.aspx.vb
Imports System.Collections.Generic
Imports Entidades
Partial Class categoria_electoral
Inherits System.Web.UI.Page
Dim catalogoPerfiles As List(Of perfil)
Dim catalogoDignidades As List(Of dignidad)
Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Session("accion") = Nothing Then
Session("accion") = "nuevo"
End If
If Session("accion") = "ver" Then
'carga los controles con los datos de la categoría
Me.llenarCampos()
ElseIf Session("accion") = "editar" Then
catalogoPerfiles = New List(Of perfil)
catalogoDignidades = New List(Of dignidad)
If Page.IsPostBack = False Then
Me.cargarCatalogos()
Else
Me.catalogoDignidades = Session("catalogoDignidades")
Me.catalogoPerfiles = Session("catalogoPerfiles")
End If
'Me.habilitarCampos(True)
ElseIf Session("accion") = "nuevo" Then
catalogoPerfiles = New List(Of perfil)
catalogoDignidades = New List(Of dignidad)
If Page.IsPostBack = False Then
Me.cargarCatalogos()
Else
Me.catalogoDignidades = Session("catalogoDignidades")
Me.catalogoPerfiles = Session("catalogoPerfiles")
End If
'bloquea los botones
Me.habilitarCampos(True)
End If
End Sub
#Region "Procedimientos y Funciones"
'Private Sub mostrar_dialogo(ByVal titulo As String, ByVal tipo As String, ByVal mensaje As String)
' If LCase(tipo) = "confirmación" Then
' Me.iconoDialogoConfirmacion.ImageUrl = "../images/dialogIcons/helpIcon.jpg"
' Me.tituloDialogoConfirmacion.Text = titulo
' Me.promptDialogoConfirmacion.Text = mensaje
' Me.ModalPopupExtender3.Show()
' Else
' Me.tituloDialogo.Text = titulo
' If LCase(tipo) = "información" Then
' Me.iconoDialogo.ImageUrl = "../images/dialogIcons/informationIcon.jpg"
' ElseIf LCase(tipo) = "error" Then
' Me.iconoDialogo.ImageUrl = "../images/dialogIcons/errorIcon.jpg"
' End If
' Me.promptDialogo.Text = mensaje
' Me.ModalPopupExtender2.Show()
' End If
'End Sub
Private Sub llenarCampos()
Dim unaCategoria As categoriaElectoral
Dim i As Integer
Me.habilitarCampos(False)
unaCategoria = Session("unaCategoria")
Me.txtNombre.Text = unaCategoria.nombre
For i = 0 To unaCategoria.dignidadesElegirse.Count - 1
Me.cblDignidades.Items.Add(unaCategoria.dignidadesElegirse.Item(i).nombre)
Me.cblDignidades.Items(i).Selected = True
Next
For i = 0 To unaCategoria.perfilesParticipantes.Count - 1
Me.cblperfiles.Items.Add(unaCategoria.perfilesParticipantes.Item(i).nombre)
Me.cblperfiles.Items(i).Selected = True
Next
If unaCategoria.generoParticipante = "masculino" Then
Me.cblGenero.Items(0).Selected = True
End If
If unaCategoria.generoParticipante = "femenino" Then
Me.cblGenero.Items(1).Selected = True
End If
If unaCategoria.generoParticipante = "ambos" Then
Me.cblGenero.Items(0).Selected = True
Me.cblGenero.Items(1).Selected = True
End If
If unaCategoria.votoPonderado = True Then
Me.rblTipoVoto.Items(1).Selected = True
Else
Me.rblTipoVoto.Items(0).Selected = True
End If
Me.txtPorcentajeVotoEstudiante.Text = unaCategoria.porcentajeVotoEstudiante
Me.txtPorcentajeVotoEmpleado.Text = unaCategoria.porcentajeVotoEmpleado
End Sub
Private Sub llenarCamposEdicion()
Dim unaCategoria As categoriaElectoral
Dim i As Integer
Dim j As Integer
Me.habilitarCampos(False)
unaCategoria = Session("unaCategoria")
Me.txtNombre.Text = unaCategoria.nombre
For i = 0 To unaCategoria.dignidadesElegirse.Count - 1
Me.cblDignidades.Items.Add(unaCategoria.dignidadesElegirse.Item(i).nombre)
Me.cblDignidades.Items(i).Selected = True
Next
'carga los catálogos
Me.cargarCatalogos()
'marca los items utilizados en el catálogo
For i = 0 To unaCategoria.dignidadesElegirse.Count - 1
For j = 0 To Me.catalogoDignidades.Count - 1
If Me.catalogoDignidades.Item(j).codigo = unaCategoria.dignidadesElegirse.Item(i).codigo Then
Me.cblDignidades.Items(j).Selected = True
Exit For
End If
Next
Next
For i = 0 To unaCategoria.perfilesParticipantes.Count - 1
For j = 0 To Me.catalogoPerfiles.Count - 1
If Me.catalogoPerfiles.Item(j).codigo = unaCategoria.perfilesParticipantes.Item(i).codigo Then
Me.cblperfiles.Items(j).Selected = True
Exit For
End If
Next
Next
If unaCategoria.generoParticipante = "masculino" Then
Me.cblGenero.Items(0).Selected = True
End If
If unaCategoria.generoParticipante = "femenino" Then
Me.cblGenero.Items(1).Selected = True
End If
If unaCategoria.generoParticipante = "ambos" Then
Me.cblGenero.Items(0).Selected = True
Me.cblGenero.Items(1).Selected = True
End If
If unaCategoria.votoPonderado = True Then
Me.rblTipoVoto.Items(1).Selected = True
Else
Me.rblTipoVoto.Items(0).Selected = True
End If
Me.txtPorcentajeVotoEstudiante.Text = unaCategoria.porcentajeVotoEstudiante
Me.txtPorcentajeVotoEmpleado.Text = unaCategoria.porcentajeVotoEmpleado
End Sub
Private Sub cargarCatalogos()
Dim i As Integer
'carga las dignidades
catalogoDignidades = CapaNegocios.gestorDignidades.obtenerCatalogoDignidades
Me.cblperfiles.Items.Clear()
Me.cblDignidades.Items.Clear()
'carga en el control las dignidades
For i = 0 To catalogoDignidades.Count - 1
Me.cblDignidades.Items.Add(catalogoDignidades.Item(i).nombre)
Next
'carga los perfiles
catalogoPerfiles = CapaNegocios.gestorPerfiles.obtenerCatalogoPerfiles
'carga en el control los perfiles
For i = 0 To catalogoPerfiles.Count - 1
Me.cblperfiles.Items.Add(catalogoPerfiles.Item(i).nombre)
Next
Session("catalogoDignidades") = Me.catalogoDignidades
Session("catalogoPerfiles") = Me.catalogoPerfiles
End Sub
Private Function limpiar_campos() As Boolean
Dim i As Integer
'limpia los controles
Me.txtNombre.Text = ""
Me.cblGenero.Items.Item(0).Selected = False
Me.cblGenero.Items.Item(1).Selected = False
For i = 0 To Me.cblDignidades.Items.Count - 1
Me.cblDignidades.Items.Item(i).Selected = False
Next
For i = 0 To Me.cblperfiles.Items.Count - 1
Me.cblperfiles.Items.Item(i).Selected = False
Next
Me.txtPorcentajeVotoEmpleado.Text = ""
Me.txtPorcentajeVotoEstudiante.Text = ""
'Me.Page.Controls.Clear()
End Function
Private Sub habilitarCampos(ByVal estado As Boolean)
Me.txtNombre.ReadOnly = Not estado
Me.cblDignidades.Enabled = estado
Me.cblperfiles.Enabled = estado
Me.rblTipoVoto.Enabled = estado
Me.cblGenero.Enabled = estado
Me.txtPorcentajeVotoEmpleado.ReadOnly = Not estado
Me.txtPorcentajeVotoEstudiante.ReadOnly = Not estado
Me.cmdGuardar.Enabled = estado
Me.cmdEditar.Enabled = Not estado
Me.cmdEliminar.Enabled = Not estado
End Sub
#End Region
#Region "Botones"
Protected Sub cmdEditar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdEditar.Click, cmdEliminar.Click
'verifica si esta editando luego de haber hecho un ingreso
'If Session("accion") = "nuevo" Then
'End If
'debe cargar los catálogos y marcar los items que han sido seleccionados
Session("accion") = "editar"
Me.llenarCamposEdicion()
Me.habilitarCampos(True)
End Sub
Protected Sub cmdEliminar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdEliminar.Click
Session("accion") = "eliminar"
'solicita confirmación
'Me.mostrar_dialogo("Confirmación", "Confirmación", "¿Confirma que desea eliminar la categoría electoral?")
End Sub
Protected Sub cmdGuardar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdGuardar.Click
Dim unaCategoria As categoriaElectoral = New categoriaElectoral
Dim i As Integer
If Page.IsValid Then
'asgina los campos
unaCategoria.nombre = Me.txtNombre.Text
If Me.cblGenero.Items.Item(0).Selected = True And Me.cblGenero.Items.Item(1).Selected = True Then
unaCategoria.generoParticipante = "ambos"
ElseIf Me.cblGenero.Items.Item(0).Selected = True Then
unaCategoria.generoParticipante = "masculino"
ElseIf Me.cblGenero.Items.Item(1).Selected = True Then
unaCategoria.generoParticipante = "femenino"
End If
'asigna los perfiles participantes
For i = 0 To Me.cblperfiles.Items.Count - 1
If Me.cblperfiles.Items.Item(i).Selected = True Then
unaCategoria.perfilesParticipantes.Add(Me.catalogoPerfiles.Item(i))
End If
Next
'asgina las dignidades a elegirse
For i = 0 To Me.cblDignidades.Items.Count - 1
If Me.cblDignidades.Items.Item(i).Selected = True Then
unaCategoria.dignidadesElegirse.Add(Me.catalogoDignidades.Item(i))
End If
Next
If IsNumeric(Me.txtPorcentajeVotoEmpleado.Text) Then
unaCategoria.porcentajeVotoEmpleado = CDec(Me.txtPorcentajeVotoEmpleado.Text)
End If
If IsNumeric(Me.txtPorcentajeVotoEstudiante.Text) Then
unaCategoria.porcentajeVotoEstudiante = CDec(Me.txtPorcentajeVotoEstudiante.Text)
End If
If IsNumeric(Me.lblValorVotoProfesor.Text) Then
&