0 votos

realizar una llamada ajax al action (usando $.ajax de jquery)

hola a todos

tengo el siguiente codigo

he asignado a un listado a mi DropDownList desde el controller con un view

ViewBag.Ciudad = new SelectList(GetCiudadAll, "idCiudad", "NombreCiudad");

en la vista se visualiza asi:

@Html.DropDownList("Ciudad", (SelectList)ViewBag.Ciudad, "-- Seleccione Ciudad --", new { @class = "form-control", required = "required" })

pero se necesita que para ciertos tipos de Impuesto se cambie el listado de ciudades para esto realizo este codigo jquery en la vista

$(document).ready(function () {

    $('#TipoImpuesto').change(function () {
        if ($('#TipoImpuesto').val() == ('CO3')) {
            $('#Ciudad').find('option').remove();

            var CiudadICA = ['MEDELLIN', 'BOGOTA', 'CALI', 'APARTADO', 'YOPAL'];

            $.each(CiudadICA, function (index, value) {
                var option = $('<option value="' + value + '">' + value + '</option>');
                $('#Ciudad').append(option);
            });
        }
        else {
            $('#Ciudad').find('option').remove();
            $.ajax({
                url: '@Url.Action("GenerarCertificado", "GenerarCertificado")',
                data: JSON.parse('new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(ViewBag.Ciudad)'),
                dataType: 'json',
                type: 'POST',
                contentType: 'application/json',
                success: function (data) {
                    $.each(data, function (index, value) {
                        var option = $('<option value="' + index + '">' + value + '</option>');
                        $('#Ciudad').append(option);
                    });
                },
                error: function (data, status, jqXHR) {
                    alert('Error al cargar Ciudades.');
                }
            }); // end $.ajax
        }
    });

en el Codicional ELSE trato de iterar el json y usar el mismo codigo que define los options del combo; pero no SÉ como Hacer esto soy novato con jquery y javascript.

el error que me sale al llevar el viewbag al json es en esta linea

data: JSON.parse('new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(ViewBag.Ciudad)'),

0 votos

y si lo cambias por data : $('#Ciudad').val()

0voto

Bryan VC Puntos85

Hazlo de la siguiente manera:

Agrega esta función general para enviar peticiones AJAX:

FUNCIÓN QUE REALIZA LLAMADA A WEBMETHOD (SINCRONO)

function fn_util_AjaxSyncWM_Obj(pstrMetodo, pParam, successFn, errorFn) {

var oParametros = JSON.stringify(pParam);

//Arma Parametros
var parametro = '';
if (oParametros == '') {
    parametro = "{}";
} else {
    parametro = oParametros;
}

//Ejecuta Ajax
$.ajax({
    type: "POST",
    url: pstrMetodo,
    contentType: "application/json; charset=utf-8",
    data: parametro,
    dataType: "json",
    async: false,
    success: function (result) {
        if ($.trim(result.Tipo) == 999) {

            window.location = VG_RUTA_SERVIDOR + "Home/Logueo?ActionValidacion=1";
        } else {
            successFn(result);
        }
    },
    error: errorFn
});

METODO EN EL CONTROLLER

        [HttpPost]
    public JsonResult Listar(int piId)
    {
        try
        {
            //Parametros
            enAdminArchivo oenAdminArchivo = new enAdminArchivo()
            {
                iTipoArchivo = utlConstante.TipoArchivo_Faq
            };

            //Lista de Eventos
            IwsAdminClient wsAdmin = new IwsAdminClient();
            List<enAdminArchivo> loenAdminArchivo = wsAdmin.WSListarFaq(oenAdminArchivo).Cast<enAdminArchivo>().ToList();

            return Json(loenAdminArchivo);

        }
        catch (Exception ex)
        {
           return Json(new { vError = "No se pudo listar los archivos. Por favor, inténtelo mas tarde." });
        }

    }

CODIGO JS (Invocando método)

function fn_Listar() {

var piIdProyecto = 0;
var arrParametros = ["piId", 0];

fn_util_AjaxSyncWM(
       VG_RUTA_SERVIDOR + "Faq/Listar",
       arrParametros,
       function (result) {

           var trRow = '<tr><td colspan="5" style="text-align:center;"><small>No existe registros para mostrar</small></td></tr>';

           try {

               if (typeof result.vError != "undefined") {
                   fn_util_MuestraMensaje("ERROR.", result.vError, "E");
               }
               else {//Valida OK
                   trRow = "";
                   $.each(result, function (index, row) {

                       trRow += '<tr id="' + index + '" style="cursor: pointer;">';

                       trRow += '<td>' + row.vTipo + '</td>';
                       trRow += '<td>' + row.vNombreArchivo + '</td>';
                       trRow += '<td>' + row.vPesoArchivo + '</td>';
                       trRow += '<td>' + row.vFecha + '</td>';
                       trRow += '<td class="text-center">';
                       trRow += '<button type="button" class="btn btn-outline btn-primary btn-xs" sca="' + row.vRutaCompleta + '" onclick="fn_Ver(this);"> Ver </button>';
                       trRow += '<button type="button" class="btn btn-primary btn-xs" onclick="fn_Modificar(' + row.iIdArchivo + ')" style="margin-left :3px"> Cambiar </button>';
                       trRow += '</td>';

                       trRow += '</tr>';

                   });
               }

           } catch (e) {
               trRow = '<tr><td colspan="5" style="text-align:center;"><small>No existe registros para mostrar</small></td></tr>';
               fn_util_MuestraMensaje("ERROR.", "No se pudo listar Faq. Por favor, inténtelo mas tarde.", "E");
           }
           //Listar archivos para el carrusel
           $("#tblFaqBody").html(trRow);
       },
       function (result) {
           alert("No se pudo listar Faq. Por favor, inténtelo mas tarde.");
       }
);

}

0 votos

guau bryan con tanto codigo eso parece un virus jejejeje!! ya he hecho algunas modificaciones a mi codigo y tenia algunas pequeñas hmmm cositas que no debian estar despues de un JSON.parse (data) me sale un objeto array y en la visualización me sale los objects del array... gracias por tu aporte pero no creo que este me pueda servir

0voto

german valencia Puntos110

public async Task<JsonResult> GetDataCiudades()// { return Json(await db.ciudad.ToListAsync()); }

resulto que estaba colocando enviado mal desde el controlerel de arriba es lo unico que hacia falta

 public async Task<JsonResult> GetDataCiudades()//
    {
        var CiudadesJson = await db.ciudad.ToListAsync();

        JavaScriptSerializer jss = new JavaScriptSerializer();
        string resultat_Json = jss.Serialize(CiudadesJson);

        return Json(resultat_Json);
    }

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: