none
problemas con UpdatePanel cuando un Evento se dispara automáticamente RRS feed

  • Pregunta

  • Buenas, Estoy trabajando en un proyecto con un dispositivo POS "point of sale" para realizar pagos a través de tarjetas de Credito y debito. El problema surge cuando el dispositivo intende hacer un UPDATE..
    Estoy trabajando con UpdatePanel

    <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true" />
            <asp:UpdatePanel ID="up_valida" runat="server" UpdateMode="Conditional" >
      <ContentTemplate>
        ---Contendio actualizable
      </ContentTemplate>
    </asp:UpdatePanel>

    TODO actualiza correctamente cuand hago el update con un boton que esta dentro del: 

    <ContentTemplate>
        ---Boton que actualiza
    </ContentTemplate>

    Pero al parecer el dispositivo que lee las tarjetas llama a una función automaticamente  cuando detecta un cambio por medio del USB es ahi cuando me genera el error, cuando intento hacer el update desde esa funcion me sale

    System.InvalidOperationException: 'Sólo se puede llamar al método Update en el control UpdatePanel con el id. 'up_valida' antes de Render.'

    alguna ayuda porfavor necesito hacer "up_valida.Update();"   cuando el USB dispare una función en mi codigo, esta es la funcion que entra automaticamente cuando el dispositivo detecta la tarjeta.
    private void SolTransactionAndPIN()//
    {      
                FuncionModificaLable("ingresePin");
                up_valida.Update();
    }

     

    lunes, 20 de enero de 2020 12:13

Respuestas

  • hola

    >>Importe una librería que saque de un proyecto de Escritorio 

    ehh pero entiendes los conceptos del desarrollo web de lo que es cliente y lo que es servidor ?

    ese codigo que usas ejecuta del lado del servidor, no del cliente, no funciona lo que estas queriendo realizar

    Deberias capturar el USB usando codigo javascript que ejecute en el browser

    >>Después de que entra a este metodo o al final del metodo  PortCOM_DataReceived ,es donde quisiera entra a hacer el Update..

    No se puede

    ese codigo ejecuta en el servidor, no en el cliente

    Ademas todos los diferentes instancias del browser leerian desde la misma PC

    Creo qe te equivocaste de tipo de proyecto, no aplica la interacion del USB de un dispositivo en la pc del usuario con un desarrollo web, deberia ser desktop

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta aldair1225 lunes, 20 de enero de 2020 14:01
    lunes, 20 de enero de 2020 14:00

Todas las respuestas

  • hola

    >>un proyecto con un dispositivo POS "point of sale" para realizar pagos a través de tarjetas de Credito y debito.

    un desarrollo web con un dispositivo es una pesima idea

    las aplicaciones web no se se llevan bien cando tienen que interactuar con dispositivos en la PC del usuario

    >>cuando el USB dispare una función en mi codigo, esta es la funcion que entra automaticamente

    Como lograste que una accion en un puerto USB sea capturada desde el browser ? usas alguna libreria javascript en especial

    porque hasta donde conozco esto no se podria realizar

    >>Sólo se puede llamar al método Update en el control UpdatePanel con el id. 'up_valida' antes de Render.

    porque necesitas realizar un Update() ? no es que realice una accion de algun boton que este dentro del updatepanel

    porque si es asi podrias usar jquery, seleccionar ese boton y realizar el click usando codigo, entonces desencadena la accion de ese boton

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 20 de enero de 2020 13:26
  • Gracias por la pronta respuesta...
    >>Como lograste que una accion en un puerto USB sea capturada desde el browser ? usas alguna libreria javascript en especial

    Importe una librería que saque de un proyecto de Escritorio  

     private _POSLibrary._LibraryPOS _pos = new _POSLibrary._LibraryPOS();

    No estoy muy seguro del funcionamiento pero cuando detecta una un cambio en el dispositivo siempre entra a esta metodo (yo lo llamo función)

    CUANDO EL DISPOSITIVO DETECTA QUE SE AH INSERTADO UNA TARJETA ENTRA A ESTE METODO

     /// <summary>
    /// Metodo para recibir mensajes de comunicación del POS
    /// </summary>
    /// <param name="sender">Puerto Serial</param>
    /// <param name="e">Argumentos generados por el Puerto Serial</param>
            public void PortCOM_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
                
                SerialPort sp = (SerialPort)sender;
                int bytesLeidos = sp.BytesToRead;
                byte[] buffer = new byte[bytesLeidos];
                sp.Read(buffer, 0, bytesLeidos);
                string strReply = _pos._ByteArrayToString(buffer);//-- dll ---
                                                                  //this.LogText = this.LogText + "CAJA| " + strReply + "\n";
    
                if (strReply != null)
    
                {
                    if (strReply.Length == 4 && strReply.Substring(0, 4) == "01FF")
                    {
                        _status = "-1";
                        cancel = true;
                        _PinCancel = true;
                        CancelAndClosePort();
                    }
                    else
                       if (strReply.Length > 8 && strReply.Substring(strReply.Length - 8, 8) == "58580306")
                    {
                        _status = "-1";
                        _PANCancel = true;
                        cancel = true;
                        CancelAndClosePort();
                    }
                }
                ContinueFlow(strReply);
    
            }

    Después de que entra a este metodo o al final del metodo  PortCOM_DataReceived ,es donde quisiera entra a hacer el Update..
    >>porque necesitas realizar un Update() ? no es que realice una accion de algun boton que este dentro del updatepanel 
    para mostrar un mensaje de que DIGITE EL PIN CUANDO EL DISPOSITIVO DETECTE QUE SE AH INSERTADO LA TARJETA pero me sale el error mencionado System.InvalidOperationException: 'Sólo se puede llamar al método Update en el control UpdatePanel con el id. 'up_valida' antes de Render.'


    • Editado aldair1225 lunes, 20 de enero de 2020 13:57 Añadi el error que mencione al inicio
    lunes, 20 de enero de 2020 13:51
  • hola

    >>Importe una librería que saque de un proyecto de Escritorio 

    ehh pero entiendes los conceptos del desarrollo web de lo que es cliente y lo que es servidor ?

    ese codigo que usas ejecuta del lado del servidor, no del cliente, no funciona lo que estas queriendo realizar

    Deberias capturar el USB usando codigo javascript que ejecute en el browser

    >>Después de que entra a este metodo o al final del metodo  PortCOM_DataReceived ,es donde quisiera entra a hacer el Update..

    No se puede

    ese codigo ejecuta en el servidor, no en el cliente

    Ademas todos los diferentes instancias del browser leerian desde la misma PC

    Creo qe te equivocaste de tipo de proyecto, no aplica la interacion del USB de un dispositivo en la pc del usuario con un desarrollo web, deberia ser desktop

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta aldair1225 lunes, 20 de enero de 2020 14:01
    lunes, 20 de enero de 2020 14:00
  • OK Despejada todas mis dudas, Muchas gracias
    lunes, 20 de enero de 2020 14:04