none
Evento onlick no invoca la función RRS feed

  • Pregunta

  • Amigos, reconzco que muchos de los problemas que tengo son por desconocimiento de la tecnología o herramientas pero estoy en un momento en que no puedo detenerme a entrenar como debe de ser, pido su ayuda y disculpas por cuestiones que quiza son obvias o simples:

    Tengo una vista con una tabla y por cada fila un boton (input type button) con una llamada a una función:

    <input type="button" value="Eliminar" onclick="EliminarFila(@item.MNDNID);"/>

    Y en la sección JavaScript

    <script type="text/javascript">
    
        $(document).ready(function () {
            
            function EliminarFila(Id) {
                alert("Probando...");
            }
    }
    

    Pero la función nunca es invocada al hacer click sobre el botón, comento que se trata de una vista parcial, moví el script a la vista "padre" pero tampoco funciona. Hay algo que pueda estar evitando la llamada a la función?

    viernes, 22 de enero de 2016 16:15

Respuestas

  • >>Para poder borrar la fila (en success) hago referencia al ID del <TR> para lo cual tuve que colocar un id a cada TR: <tr id="@item.MNDNID"> es correcto?

    podrias hacerlo de forma relativa, si tienes el id del textbox, o si le pasas el this a la funciona podrias usar el .parent() para llegar el tr y removerlo

    <input type="button" value="Eliminar" onclick="EliminarFila(this, @item.MNDNID);"/>

    function EliminarFila(element, Id) {

    var tr = $(this).parent().parent();

    }

    >>$.Ajax tiene una seccion error: que entiendo es como un capturador de error, si se quiere eliminar un registro que ya no existe el error quien lo captura?

    si devuelves un error de http desde el action entonces lo tomara el error de $.ajax, pero tu deberas validar que ese id no existe y retornar el error

    >>EL action Delete es void, eso es correcto?

    podrias retornar un IHttpActionResult entonces si todo va bien devuelves un http 200 y si falla devuelves un error de http

    ¿Por qué debo usar IHttpActionResult lugar de HttpResponseMessage?

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta devinnova viernes, 22 de enero de 2016 18:53
    viernes, 22 de enero de 2016 18:46

Todas las respuestas

  • hola

    las funciones no van dentro del $(document).ready(function () {

    intenta solo usando

    <script type="text/javascript"> function EliminarFila(Id) { alert("Probando..."); }

    </script>

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 22 de enero de 2016 16:33
  • Gracias leandro, correcto, estoy con tanta presión encima que la verdad no estoy notando cosas evidentes, gracias por la observación.

    Una última duda para cerrar el hilo, el contenido de la funcion Eliminar es la siguiente:

    function EliminarFila(Id) {        
            $.ajax({
                url: '@Url.Action("Delete")',
                type: 'Post',
                data: { MNDNID: Id },
                cache: false,
                success: function () {
                    $('#' + Id).fadeOut(400, function () {
                        $(this).remove();
                    });                
                },
                error: function () {
                    alert("error");
                }
            });
        }


    Funciona correctamente, pero del código que muestro tengo tres dudas:

    1- Para poder borrar la fila (en success) hago referencia al ID del <TR> para lo cual tuve que colocar un id a cada TR: <tr id="@item.MNDNID"> es correcto? hay una forma mejor de referenciar la fila en la que estoy?.

    2- $.Ajax tiene una seccion error: que entiendo es como un capturador de error, si se quiere eliminar un registro que ya no existe el error quien lo captura? hice una prueba y el error lanzo la excepcion en el throw, mi action es el siguiente:

    [HttpPost]
            public void Delete(int MNDNID)
            {
                try
                {
                    using (InfoTireEntities context = new InfoTireEntities())
                    {
                        ModeloNeumatico_DimensionNeumatico modeloNeumatico_DimensionNeumatico = context.ModelosNeumatico_DimensionesNeumatico.Find(MNDNID);
                        
                        context.ModelosNeumatico_DimensionesNeumatico.Remove(modeloNeumatico_DimensionNeumatico);
                        context.SaveChanges();
                    }
                }
                catch (Exception)
                {                
                    throw;
                }
            }

    ¿Donde debo controlar el error?

    3- EL action Delete es void, eso es correcto? estuve acostumbrado a usar ActionResult


    • Editado devinnova viernes, 22 de enero de 2016 18:05
    viernes, 22 de enero de 2016 18:02
  • >>Para poder borrar la fila (en success) hago referencia al ID del <TR> para lo cual tuve que colocar un id a cada TR: <tr id="@item.MNDNID"> es correcto?

    podrias hacerlo de forma relativa, si tienes el id del textbox, o si le pasas el this a la funciona podrias usar el .parent() para llegar el tr y removerlo

    <input type="button" value="Eliminar" onclick="EliminarFila(this, @item.MNDNID);"/>

    function EliminarFila(element, Id) {

    var tr = $(this).parent().parent();

    }

    >>$.Ajax tiene una seccion error: que entiendo es como un capturador de error, si se quiere eliminar un registro que ya no existe el error quien lo captura?

    si devuelves un error de http desde el action entonces lo tomara el error de $.ajax, pero tu deberas validar que ese id no existe y retornar el error

    >>EL action Delete es void, eso es correcto?

    podrias retornar un IHttpActionResult entonces si todo va bien devuelves un http 200 y si falla devuelves un error de http

    ¿Por qué debo usar IHttpActionResult lugar de HttpResponseMessage?

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta devinnova viernes, 22 de enero de 2016 18:53
    viernes, 22 de enero de 2016 18:46
  • Gracias Leandro, muy amable por tu apoyo.
    viernes, 22 de enero de 2016 18:53