none
Mostrar variable model en alert Javascript

    Pregunta

  • Hola,

    Necesito recorrer un modelo y mostrar la variable almacena, lo he intentado con el siguiente código, pero no me resulta:

    @model IEnumerable<MvcMusicStoreDemo.Models.Productos> @{ ViewBag.Title = "Productos"; Layout = "~/Views/Shared/_Layout.cshtml"; } @foreach (var item in Model) {

    <div> <script type="text/javascript" language="javascript" > alert('Variable almacenada: '+ @item.NombrePro); </Script> </div> }

    nota: esto solo lo requiero para revisar el código y ver la variable aparte del debug.

    Gracias

    Saludos


    Mauricio Hernández A.


    • Editado mauriciohz jueves, 17 de enero de 2013 18:33 falta info...
    jueves, 17 de enero de 2013 18:32

Respuestas

  • Un fallo que le veo es que no está bien cerrado el tag "<script>" (el cierre tiene la "S" en mayúsculas, y aunque el HTML lo tolera, al XHTML y al motor Razor sí que les molesta).

    Otro fallo es que dentro del alert, el @item.NombrePro debería ir dentro de las comillas, no fuera.

    Si después de hacer esos cambios sigue fallando, deja que el debugger siga ejecutándose hasta que te salga la página en el navegador y después pincha sobre el fondo de la página con el botón derecho y selecciona la opción "Ver fuente". Fíjate en el HTML que le ha llegado al navegador, y examínalo a ver si da una pista de cuál puede ser el problema. Si no lo ves claro, cópianos aquí el resultado.

    • Marcado como respuesta mauriciohz viernes, 18 de enero de 2013 13:30
    jueves, 17 de enero de 2013 23:08
  • Un fallo muy grave que estoy viendo es aqui:

    alert('Variable almacenada: '+ @item.NombrePro);

    Simplemente como mezclas C# con JavaScript, no puedes usar el signo "+", te explico:

    Si ves en el codigo de fuente de la página (Compilada), en esa zona te aparecerá algo así (Suponiendo que esa variable retorna el valor "blablabla") :

    alert('Variable almacenada: ' blablabla); // -> Lo que está mal en Javascript y nunca te va a funcionar

    Para que estes en lo correcto, cambia esa función a esta:

    alert('Variable almacenada: @item.NombrePro');

    Asunto Arreglado :)

    • Marcado como respuesta mauriciohz viernes, 18 de enero de 2013 13:30
    viernes, 18 de enero de 2013 13:11
  • Hola,

    Gracias a MAXDELPHI y Alberto P. por la ayuda,

    he solucionado el problema con las indicaciones que anteriormente me señalan.

    aquí esta la salida de JavaScript:


    y el código corregido:

    @model IEnumerable<MvcMusicStoreDemo.Models.Productos>
    
    @{
        ViewBag.Title = "Productos";
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
    <h2>@ViewBag.Message</h2>
    
    @foreach (var item in Model)
    {
    <div class="bordesolido">
    
    Productos:
    @Html.ActionLink(item.NombrePro, "Index")<br />
    <!-- Imagen -->
    @{ var urlImagen = item.Url; }
    <img src="@Url.Content(urlImagen)" width="148px" height="148px" alt="imgf"/> 
    
    <script type="text/javascript" language="javascript">
    alert('Esto es lo que un mensaje de alerta parece: @item.NombrePro');
    </script>
    
    </div>
    }

    Saludos

    :)


    Mauricio Hernández A.

    • Marcado como respuesta mauriciohz viernes, 18 de enero de 2013 13:30
    viernes, 18 de enero de 2013 13:29

Todas las respuestas

  • Suponiendo que Model sea un IEnumerable de una clase que contiene una propiedad llamada NombrePro, el código que has puesto debería funcionar y mostrarte un alert por cada item que haya en el modelo. Si no es eso lo que tienes en el modelo, o no es ese el resultado que deseabas, tendrás que expicarte un poco mejor. Decir simplemente que "no me resulta" no es útil para que alguien pueda contestarte. Cuando preguntes en los foros, explica siempre con detalle cuál es el error que te sale, indicando el texto exacto del error, y la línea del código fuente en la que ocurre, y si es en tiempo de compilación o de ejecución. Si no da un error, sino que símplemente no produce los resultados esperados, explica con precisión cuáles son los resultados que se obtienen y en qué difieren de los que deseas obtener. Y proporciona detalles sobre las partes del código que no se ven; en este caso particular, para saber cómo es el código que habría qué escribir, o entender cómo funciona el código existente, es vital saber qué hay dentro del Model, pero no puede deducirse a partir del código que muestras.
    jueves, 17 de enero de 2013 19:38
  • Hola Alberto,

    He comprendido el modo de especificar y detallar las preguntas, gracias por la observación.

    En cuanto a la pregunta realizada:

    "debería funcionar y mostrarte un alert por cada item que haya en el modelo"

    bien, eso no pasa y  "no me resulta" 

    dejo detalle del Modelo,Controlador,Vista

    MODELO

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    
    namespace MvcMusicStoreDemo.Models
    {
        public class Productos
        {
            public int Id { get; set; }
            public string NombrePro { get; set; }
            public string Descripcion { get; set; }
            public int Precio { get; set; }
            public string Url { get; set; }
    
            public  List<Productos> GetProductos() 
            {
                List<Productos> lstProductos = new List<Productos>();
                lstProductos.Add(new Productos 
                { Id = 1, NombrePro = "Crateus", 
                    Descripcion = "Arbusto para uso en cercos vivos", 
                    Precio = 320, Url = "~/Content/Images/Productos/alfa.jpg" 
                });
                lstProductos.Add(new Productos 
                { Id = 2, NombrePro = "Acacia Capensis",
                    Descripcion = "Arbusto espino para uso en cercos vivos perimetrales", 
                    Precio = 350, Url = "~/Content/Images/Productos/gama.jpg" 
                });
                return lstProductos;
            }
        }
    }

    CONTROLADOR

            public ActionResult Productos()//Productos
            {
                ViewBag.Message = "Nuestros productos, Solución en cerco vivo";
                Productos pro = new Productos();
                List<Productos> lstPro = pro.GetProductos();
                return View(lstPro);
            }

    VISTA

    @model IEnumerable<MvcMusicStoreDemo.Models.Productos>
    
    @{
        ViewBag.Title = "Productos";
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
    <h2>@ViewBag.Message</h2>
    
    @foreach (var item in Model)
    {
    <div class="bordesolido">
    
    Productos:
    @Html.ActionLink(item.NombrePro, "Index")<br />
    <!-- Imagen -->
    @{ var urlImagen = item.Url; }
    <img src="@Url.Content(urlImagen)" width="148px" height="148px" alt="imgf"/> 
    
    <script type="text/javascript" language="javascript">
    alert('Esto es lo que un mensaje de alerta parece.'+ @item.NombrePro);
    </Script>
    
    </div>
    }

    Como se ve en la imagen aparece en la imagen el valor de la variable NombrePro, es ese el valor que necesito en el Alert

    nota: esto solo lo requiero para revisar el código y ver la variable aparte del debug.

    Gracias

    Saludos


    Mauricio Hernández A.

    jueves, 17 de enero de 2013 22:02
  • Un fallo que le veo es que no está bien cerrado el tag "<script>" (el cierre tiene la "S" en mayúsculas, y aunque el HTML lo tolera, al XHTML y al motor Razor sí que les molesta).

    Otro fallo es que dentro del alert, el @item.NombrePro debería ir dentro de las comillas, no fuera.

    Si después de hacer esos cambios sigue fallando, deja que el debugger siga ejecutándose hasta que te salga la página en el navegador y después pincha sobre el fondo de la página con el botón derecho y selecciona la opción "Ver fuente". Fíjate en el HTML que le ha llegado al navegador, y examínalo a ver si da una pista de cuál puede ser el problema. Si no lo ves claro, cópianos aquí el resultado.

    • Marcado como respuesta mauriciohz viernes, 18 de enero de 2013 13:30
    jueves, 17 de enero de 2013 23:08
  • Un fallo muy grave que estoy viendo es aqui:

    alert('Variable almacenada: '+ @item.NombrePro);

    Simplemente como mezclas C# con JavaScript, no puedes usar el signo "+", te explico:

    Si ves en el codigo de fuente de la página (Compilada), en esa zona te aparecerá algo así (Suponiendo que esa variable retorna el valor "blablabla") :

    alert('Variable almacenada: ' blablabla); // -> Lo que está mal en Javascript y nunca te va a funcionar

    Para que estes en lo correcto, cambia esa función a esta:

    alert('Variable almacenada: @item.NombrePro');

    Asunto Arreglado :)

    • Marcado como respuesta mauriciohz viernes, 18 de enero de 2013 13:30
    viernes, 18 de enero de 2013 13:11
  • Hola,

    Gracias a MAXDELPHI y Alberto P. por la ayuda,

    he solucionado el problema con las indicaciones que anteriormente me señalan.

    aquí esta la salida de JavaScript:


    y el código corregido:

    @model IEnumerable<MvcMusicStoreDemo.Models.Productos>
    
    @{
        ViewBag.Title = "Productos";
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
    <h2>@ViewBag.Message</h2>
    
    @foreach (var item in Model)
    {
    <div class="bordesolido">
    
    Productos:
    @Html.ActionLink(item.NombrePro, "Index")<br />
    <!-- Imagen -->
    @{ var urlImagen = item.Url; }
    <img src="@Url.Content(urlImagen)" width="148px" height="148px" alt="imgf"/> 
    
    <script type="text/javascript" language="javascript">
    alert('Esto es lo que un mensaje de alerta parece: @item.NombrePro');
    </script>
    
    </div>
    }

    Saludos

    :)


    Mauricio Hernández A.

    • Marcado como respuesta mauriciohz viernes, 18 de enero de 2013 13:30
    viernes, 18 de enero de 2013 13:29