No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de ASP.NET Core

Curso de ASP.NET Core

Juan Carlos Ruiz

Juan Carlos Ruiz

Vistas parciales

14/35
Recursos

Aportes 40

Preguntas 6

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

var listaAsignaturas = new List<Asignatura> () {
        new Asignatura {
        Nombre = "Matemáticas",
        UniqueId = Guid.NewGuid ().ToString ()
        },
        new Asignatura {
        Nombre = "Educación Física",
        UniqueId = Guid.NewGuid ().ToString ()
        },
        new Asignatura {
        Nombre = "Castellano",
        UniqueId = Guid.NewGuid ().ToString ()
        },
        new Asignatura {
        Nombre = "Ciencias Naturales",
        UniqueId = Guid.NewGuid ().ToString ()
        },
        new Asignatura {
        Nombre = "Programacion",
        UniqueId = Guid.NewGuid ().ToString ()
        }

Eso no es reutilizar código es copiar y pegar.

En AsignaturaSimple.cshtml no es necesario poner @Model Asignatura ya que en el index de asignatura está tipeado y partial lo toma como valor para pasarlo a AsignaturaSimple, excelente curso, me está encantando. 😃

Si han manejado Frameworks de JS se darán cuenta que las vistas parciales se parecen a los componentes :0

El copiar y pegar no significa reutilizar código.

Una ** vista parcial ** es un archivo de marcado .cshtml que se mantiene dentro de la carpeta Vistas (MVC) o Páginas (Razor Pages).Los nombres de archivo de las vistas parciales suelen comenzar con un guión bajo (_).


using Microsoft.AspNetCore.Mvc;
using HolaMundoMVC.Models;
using System.Collections.Generic;

namespace HolaMundoMVC.Controllers
{
    public class AsignaturaController : Controller
    {
        public IActionResult Index()
        {
            var asignatura = new Asignatura { Nombre = "Programacion" };

            ViewBag.CosaDinamica = "La Monja";

            return View(asignatura);
        }

        public IActionResult MultiAsignatura()
        {
            var listaAsignaturas = new List<Asignatura>(){
                            new Asignatura{Nombre="Matemáticas"} ,
                            new Asignatura{Nombre="Educación Física"},
                            new Asignatura{Nombre="Castellano"},
                            new Asignatura{Nombre="Ciencias Naturales"},
                            new Asignatura{Nombre="Programacion"}
                };

            // return View("MultiAsignatura",asignatura);
            return View(listaAsignaturas);
        }
    }
}

en el archivo MultiAsignatura.cshtml

en esta linea

@foreach(var asignatura in Model)
{
<partial name=“AsignaturaSimple” model=""/>
}

Me dice que model no puede quedar vacio

Puedo tener mas de un modelo 1 modelo parametrisado

Al momento de utilizar el taghelper <partial/> en ninguna de las pruebas me es posible cargar la informacion con esta etiqueta, no me sale ningun mensaje de error solo no se muestra nada en pantalla

@model Asignatura
@{
    ViewData["Title"] = "Informacion Asignatura";
    Layout = "Simple";
}

<h1>@ViewData["Title"] </h1>
<strong>Desde la vista nomal</strong>
<p>
    Nombre: @Model.Nombre <br/>
    id: @Model.UniqueId
</p>

<strong>Desde la vista parcial</strong>

<partial name="AsignaturaSimple" />



<p> @ViewBag.Fecha </p>

desde el controlador se puede cambiar el router y quitar el estandar que es View/index por el nombre del view generado, en este caso en el cual iteraríamos nuestros cursos

Por cierto, de alguna manera las Vistas parciales me recuerdan un poco a los componentes de Angular

a mi no me permite utilizar el @model Asignatura me dice que falta algun using o referencia y ya tengo mis clases en la carpeta model

Ese momento cuando te das cuenta de que algo anda mal antes de que suceda en la clase 😎

Una vez que agregamos otra acción al AsignaturaController, es decir, tenemos un Index y un MultiAsignatura entonces en el return de MultiAsignatura ya no es necesario especificar la vista:

return View("MultiAsignatura",listaAsignaturas);

Directamente funciona con:

return View(listaAsignaturas);

En mi caso fue necesario agregar los nombres de las rutas a los métodos del Controller, de lo contrario me marcaba error de ambigüedad.

Puede ser que ya no ande

 <partial name="..." />

En mi caso al menos
Lo solucioné con

@Html.Partial("...", Modelo)

<partial> es el tag helper que nos permite usar los partial views

Elegante uso del código en el controlador, excelente cada vez aprendiendo más

Los tagHelper son como los templates tags en django, según la utilidad que le veo en el ejemplo.

Me sale este error y no se a que se debe

InvalidOperationException: The model item passed into the ViewDataDictionary is of type ‘System.String’, but this ViewDataDictionary instance requires a model item of type ‘HolaMundoMVC.Models.Asignatura’.
Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.EnsureCompatible(object value)

Stack Query Cookies Headers
InvalidOperationException: The model item passed into the ViewDataDictionary is of type ‘System.String’, but this ViewDataDictionary instance requires a model item of type ‘HolaMundoMVC.Models.Asignatura’.
Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.EnsureCompatible(object value)
Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary…ctor(ViewDataDictionary source, object model, Type declaredModelType)
lambda_method(Closure , ViewDataDictionary )
Microsoft.AspNetCore.Mvc.Razor.Internal.RazorPagePropertyActivator.CreateViewDataDictionary(ViewContext context)
Microsoft.AspNetCore.Mvc.Razor.Internal.RazorPagePropertyActivator.Activate(object page, ViewContext context)
Microsoft.AspNetCore.Mvc.Razor.RazorPageActivator.Activate(IRazorPage page, ViewContext context)
Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderPageCoreAsync(IRazorPage page, ViewContext context)
Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderPageAsync(IRazorPage page, ViewContext context, bool invokeViewStarts)
Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderAsync(ViewContext context)
Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.RenderPartialCoreAsync(string partialViewName, object model, ViewDataDictionary viewData, TextWriter writer)
Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.PartialAsync(string partialViewName, object model, ViewDataDictionary viewData)
AspNetCore.Views_Asignatura_MultiAsignatura.ExecuteAsync() in MultiAsignatura.cshtml
+
@await Html.PartialAsync(“AsignaturaSimple”,“asignatura”)

¿Aquí ya no se usa el partial View como palabra reservada desde el controlador? o me estoy adelantando al curso jeje.

Una pregunta:

Yo puedo crear varios controladores (por ejemplo, inicio, blog, about, contacto) y mostrarlos en una sola carpeta de vista que contengan diferentes vistas? ejemplo carpeta: Proyecto > Index.cshtml, blog.cshtml, about.cshtml, contacto.cshtml

O debo crear en “Views” una carpeta para cada controlador?

No se le esta enviando ningún modelo a la vista parcial, solamente lo vuelve a declarar y lo utiliza normal.

Esta super simple de entender… Heeee…

🤯

No me gusto el curso…

Buen curso

Y revice mi codigo y no mas no se renderea en la vista parcial

Gran clase, no sabia algunas cosas que utilizo a diario

Las Partials View son buenas , he trabajado con ellas

partial views buena técnica.

Las vistas parciales tambien pueden estar en el mismo folder de la vista normal

Excelente calase, muy interesante y sobre todo muy práctica

Ser un programador perezoso es muy importante ya que siempre buscaras la forma mas directa de resolver un problema… lo cual no tiene nada que ver con copiar codigo o “reutilizar” porque estas haciendo el mismo proyecto o como decimos por mi tierra: “la misma chola con otra pollera”

Aquí recordando react

Que raro no me salio el error del profe explica en la vista parcial

Asignatura simple:

@model Asignatura

@{
    ViewData["Title"] = "Información Asignatura";
    Layout = "Simple";
}

<h1>@ViewData["Title"]</h1>

<strong>Desde la vista normal</strong>
<p>
    Nombre:@Model.Nombre <br/>
    Id : @Model.UniqueId
</p>

<strong>Desde la vista parcial</strong>
<partial name="AsignaturaSimple" />


<p><i>@ViewBag.Fecha</i></p>``` 


Aqui yo reutilizando codigo 

RESUMEN:
• Invocacion de vistas: Se realiza en el controlador con la siguiente declaración.
return View(“MultiAsignatura”,listaAsignaturas );
(En este caso, lleva dos parámetros: el nombre de la vista en csthml y la lista que retorna).
• Vistas Parciales: Éstas se crean en la carpeta “Shared” y se trata de un “pedazo” de vista que se puede reutilizar en distintos sitios.
• <partial> : El tag helper “partial” se utiliza para extender el html desde el lado del servidor.
<partial name=“AsignaturaSimple” model=“asignatura” />
(En este caso, lleva el parámetro del nombre de la vista asignada y el modelo que debe utilizar).
• @foreach:
@foreach (var asignatura in Model)
{
<partial name=“AsignaturaSimple” model=“asignatura” />
}

• Vistas fuertemente y debilmente tipadas: las vistas se convirten en fuertemente tipadas agregándoles como referencia el modelo de la siguiente manera (con el nombre del modelo):
_ @model Asignatura_

P.D: es lo que pude entender pero si tienen algo más que agregar o corregir, bienvenido!

@Html.Partial(“AsignaturaSimple”) asi me sirvio