Mensaje dentro de AJAX y javascript

Responder 
#1 - 18/03/2008 18:34:34 Reporta abuso | Link Permanente
gabriel_mcv
Fecha de registro: 18/03/2008
0 post en este tema
1 post en ajax y javascript
1 post en todos los foros
Problemas con AJAX en el postback asincrono

Responder Citar

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>&nbsp;<br />
    &nbsp;
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
<br />
<asp:Label runat="server" Text="Nombre:" id="Label2" CssClass="labels">
</asp:Label>
&nbsp;
<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>
    &nbsp;<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>&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;
<br />
<asp:Label runat="server" Text="Participantes:" id="Label3" CssClass="labels">
</asp:Label>
    &nbsp;
&nbsp;&nbsp;&nbsp;
    <cc2:CheckBoxListRequiredFieldValidator ID="rfvPerfiles"
        runat="server" ControlToValidate="cblPerfiles" ErrorMessage="*"></cc2:CheckBoxListRequiredFieldValidator>
    <asp:CheckBoxList ID="cblperfiles" runat="server" CssClass="cuadrosTextoRadioCombos" TabIndex="2">
    </asp:CheckBoxList>&nbsp;<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>&nbsp;&nbsp;<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>
    &nbsp;&nbsp;&nbsp;<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>
&nbsp;
<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>
&nbsp;
<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>&nbsp;
        <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>
&nbsp;
<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 />
    &nbsp;<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 />
    &nbsp;&nbsp;
 </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
  &