Back to "Añadiendo Cadre de Entidades para Posts de Blog (Part 3)"

This is a viewer only at the moment see the article on how this works.

To update the preview hit Ctrl-Alt-R (or ⌘-Alt-R on Mac) or Enter to refresh. The Save icon lets you save the markdown file to disk

This is a preview from the server running through my markdig pipeline

ASP.NET Entity Framework

Añadiendo Cadre de Entidades para Posts de Blog (Part 3)

Friday, 16 August 2024

Puede encontrar todos los códigos de fuente para los post del blog en GitHub

El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad de oportunidades entre hombres y mujeres en materia de empleo, incluida la eliminación del trabajo forzoso.

Se puede encontrar la parte 1 a) Adopte todas las medidas necesarias para garantizar la igualdad de oportunidades entre hombres y mujeres en todos los ámbitos de la vida, incluida la educación;.

Se puede encontrar la parte 2 a) Adopte todas las medidas necesarias para garantizar la igualdad de oportunidades entre hombres y mujeres en todos los ámbitos de la vida, incluida la educación;.

El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.

En las partes anteriores establecimos la base de datos y el contexto para nuestros mensajes de blog, y añadimos los servicios para interactuar con la Base de datosM SK1 En este post, detallaremos cómo estos servicios trabajan ahora con los controladores y vistas existentesMSC3

El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.

Los controladores de salida para blogs son realmente bastante sencillos; en línea con evitar el 'Controlador de defectosM SK2 antipatrón ( un patrón ideintified en los primeros días del ASP

El patrón del controlador de grasa en ASP.NET MVC

I MVC marcos una buena práctica es hacer lo menos posible en sus métodos de controlo. Esto se debe a que el controlador es responsable de gestionar la solicitud y devolver una respuesta. No debería ser responsable de la lógica empresarial de la aplicaciónMSC2 Esta es la responsabilidad del modeloM SK3

El antipatrón 'Fat Controller' es donde el controlador hace demasiadoM SK2 Esto puede conducir a un número de problemas , incluyendoMSC4

  1. La Comisión Consultiva en Asuntos Administrativos y de Presupuesto examinó el proyecto de presupuesto por programas para el bienio 2006-2007 (A/60/6 (Sect. Una acción debe ser una única unidad de trabajo, simplemente llenando el modelo y devolviendo la vista. Si usted se encuentra repitiendo el código en varias accionesM SK2 es un signo que debe refactorizar este código en un método separado .
  2. El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad de oportunidades entre los hombres y las mujeres en materia de empleo, incluida la eliminación del trabajo forzoso. Al tener 'controladores de grasasM SK1 puede ser difícil probar el código. La prueba debería intentar seguir todos los posibles caminos a través del código , y esto puede resultar difícil si el código no está bienMSC4 estructurado y centrado en una única responsabilidadMNK5
  3. La Comisión Consultiva en Asuntos Administrativos y de Presupuesto recomienda a la Asamblea General que apruebe el siguiente proyecto de resolución: La sostenibilidad es una preocupación clave cuando se construyen aplicaciones. Tener M SK1caño de cocina' métodos de acción pueden fácilmente conducir a usted, así como a otros desarrolladores que utilicen el código para hacer cambios que rompan otras partes de la aplicación .
  4. El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad de oportunidades entre los hombres y las mujeres en materia de empleo, incluida la eliminación del trabajo forzoso. Esta es una preocupación clave para los desarrolladores. Si usted está trabajando en un proyecto con una gran base de código, puede ser difícil entender lo que está ocurriendo en una acción de controlador si está haciendo demasiado.

El controlador del blog

El controlador de blog es relativamente simple. tiene 4 acciones principales ( y una ' acción de compensaciónMSC4 para los antiguos enlaces de blogM SK5 Son estasMST6

Task<IActionResult> Index(int page = 1, int pageSize = 5)

Task<IActionResult> Show(string slug, string language = BaseService.EnglishLanguage)

Task<IActionResult> Category(string category, int page = 1, int pageSize = 5)

Task<IActionResult> Language(string slug, string language)

IActionResult Compat(string slug, string language)

Por consiguiente, el Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad de oportunidades entre hombres y mujeres en materia de empleo. IBlogService a obtener los datos que necesitan. El IBlogService El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer..

El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.

  • Index: Esta es la lista de los post del blog (defaults to English LanguageM SK2 podemos extender esto más adelante para permitir para múltiples idiomas page El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. pageSize como parámetros. Esto es para la paginación. de los resultadosM SK2
  • Ver: Este es el post individual de blog. Es necesario slug El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. language como parámetros. Éste es el método que usted utiliza actualmente para leer este post de blog.
  • Categoría: Esta es la lista de los post del blog para una categoría determinada. Es necesario category, page El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. pageSize El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.
  • Language: Esto muestra un post de blog para una lengua dada. Es necesario slug El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. language El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.
  • Compat: Esta es una acción de compatibilidad para los antiguos enlaces de blog. Es necesario slug El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. language El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.

El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.

El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. OutputCache El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. ResponseCahce para almacenar los resultados de los mensajes de blog. Esto mejora la experiencia del usuario y reduce la carga en el servidor.

Estos se implementan usando los decoradores apropiados de acción que especifican los parámetros utilizados para la acción (, así como hx-request Para las solicitudes HTMX). Para examinar con Index especificamos estos:

    [ResponseCache(Duration = 300, VaryByHeader  = "hx-request", VaryByQueryKeys = new[] {nameof(page), nameof(pageSize)}, Location = ResponseCacheLocation.Any)]
    [OutputCache(Duration = 3600, VaryByHeaderNames = new[] {"hx-request"} ,VaryByQueryKeys = new[] { nameof(page), nameof(pageSize)})]

El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.

Las vistas para el blog son relativamente simples. Son principalmente una lista de los post del blog, con algunos detalles para cada postM SK2 Las vistas están en la Views/Blog folder. Las principales vistas son:

_PostPartial.cshtml

Esta es la vista parcial para un solo post de blog. Se usa dentro de nuestro Post.cshtml El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad de oportunidades entre hombres y mujeres en materia de empleo, incluida la eliminación del trabajo forzoso.

@model Mostlylucid.Models.Blog.BlogPostViewModel

@{
    Layout = "_Layout";
}
<partial name="_PostPartial" model="Model"/>

_BlogSummaryList.cshtml

Esta es la vista parcial para una lista de post del blog. Se usa dentro de nuestro Index.cshtml vista así como en la página principal.

@model Mostlylucid.Models.Blog.PostListViewModel
<div class="pt-2" id="content">

    @if (Model.TotalItems > Model.PageSize)
    {
        <pager
            x-ref="pager"
            link-url="@Model.LinkUrl"
               hx-boost="true"
               hx-push-url="true"
               hx-target="#content"
               hx-swap="show:none"
               page="@Model.Page"
               page-size="@Model.PageSize"
               total-items="@Model.TotalItems"
            class="w-full"></pager>
    }
    @if(ViewBag.Categories != null)
{
    <div class="pb-3">
        <h4 class="font-body text-lg text-primary dark:text-white">Categories</h4>
        <div class="flex flex-wrap gap-2 pt-2">
            @foreach (var category in ViewBag.Categories)
            {
                <a hx-controller="Blog" hx-action="Category" hx-push-url="true" hx-get hx-target="#contentcontainer" hx-route-category="@category" href>
                    <span class="inline-block rounded-full dark bg-blue-dark px-2 py-1 font-body text-sm text-white outline-1 outline outline-green-dark dark:outline-white">@category</span>
                </a>
            }
        </div>
    </div>
}
@foreach (var post in Model.Posts)
{
    <partial name="_ListPost" model="post"/>
}
</div>

El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. _ListPost vista parcial para mostrar los post del blog individual junto con el el asistente de etiquetas pagando que nos permite ver los post del blog.

_ListPost.cshtml

El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. _La vista parcial de Listpost se utiliza para mostrar los artículos individuales del blog en la lista. Se usa dentro del _BlogSummaryList El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad de oportunidades entre hombres y mujeres en materia de empleo, incluida la eliminación del trabajo forzoso.

@model Mostlylucid.Models.Blog.PostListModel

<div class="border-b border-grey-lighter pb-8 mb-8">
 
    <a asp-controller="Blog" asp-action="Show" hx-boost="true"  hx-swap="show:window:top"  hx-target="#contentcontainer" asp-route-slug="@Model.Slug"
       class="block font-body text-lg font-semibold transition-colors hover:text-green text-blue-dark dark:text-white  dark:hover:text-secondary">@Model.Title</a>
    <div class="flex space-x-2 items-center py-4">
    @foreach (var category in Model.Categories)
    {
    <a hx-controller="Blog" hx-action="Category" class="rounded-full bg-blue-dark font-body text-sm text-white px-2 py-1 outline outline-1 outline-white" hx-push-url="true" hx-get hx-target="#contentcontainer" hx-route-category="@category" href>@category
    </a>
    }

    @{ var languageModel = (Model.Slug, Model.Languages, Model.Language); }
        <partial name="_LanguageList" model="languageModel"/>
    </div>
    <div class="block font-body text-black dark:text-white">@Model.Summary</div>
    <div class="flex items-center pt-4">
        <p class="pr-2 font-body font-light text-primary light:text-black dark:text-white">
            @Model.PublishedDate.ToString("f")
        </p>
        <span class="font-body text-grey dark:text-white">//</span>
        <p class="pl-2 font-body font-light text-primary light:text-black dark:text-white">
            @Model.ReadingTime
        </p>
    </div>
</div>

Como usted'll ver aquí tenemos un enlace a la post individual de blogM SK1 las categorías para el post, las lenguas en las que el post está disponible enMSC3 el resumen del post , la fecha de publicación y el tiempo de lecturaMST5

También disponemos de etiquetas de enlace HTMX para las categorías y las lenguas que nos permiten mostrar los mensajes localizados y el mensaje para una categoría determinada.

Tenemos dos maneras de usar HTMX aquí, una que da la URL completa y otra que es 'HTML sóloM SK2 (iMska4eMka5 no URLM Ska6 Esto se debe a que queremos usar el URL completo para las categorías y las lenguasMskai7 pero no necesitamosMsaka8la URL completa para el post individual del blogMaskan9

 <a asp-controller="Blog" asp-action="Show" hx-boost="true"  hx-swap="show:window:top"  hx-target="#contentcontainer" asp-route-slug="@Model.Slug"

Este enfoque llena una URL completa para el post de un blog individual y utiliza hx-boost a 'boost' la petición de utilizar HTMX (esta establece el hx-request El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. true).

  <a hx-controller="Blog" hx-action="Category" class="rounded-full bg-blue-dark font-body text-sm text-white px-2 py-1 outline outline-1 outline-white" hx-push-url="true" hx-get hx-target="#contentcontainer" hx-route-category="@category" href>@category
    </a>

Por otra parte, este enfoque utiliza las etiquetas HTMX para obtener las categorías de los post del blog. Esto utiliza el hx-controller, hx-action, hx-push-url, hx-get, hx-target El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. hx-route-category etiquetas para obtener las categorías de los post del blog mientras hx-push-url El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. true para presionar el URL a la historia del navegador.

También se utiliza dentro de nuestros Index Medidas de acción para las peticiones HTMX.

  public async Task<IActionResult> Index(int page = 1, int pageSize = 5)
    {
        var posts =await  blogService.GetPagedPosts(page, pageSize);
        if(Request.IsHtmx())
        {
            return PartialView("_BlogSummaryList", posts);
        }
        posts.LinkUrl = Url.Action("Index", "Blog");
        return View("Index", posts);
    }

Cuando nos permite devolver la vista completa o sólo la vista parcial de las peticiones HTMX, dando una experiencia similar a 'SPAM SK2

El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.

El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. HomeController también nos referimos a estos servicios de blog para obtener los últimos post del blog para la página principal. Esto se hace en el Index El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.

   public async Task<IActionResult> Index(int page = 1,int pageSize = 5)
    {
            var authenticateResult = GetUserInfo();
            var posts =await blogService.GetPagedPosts(page, pageSize);
            posts.LinkUrl= Url.Action("Index", "Home");
            if (Request.IsHtmx())
            {
                return PartialView("_BlogSummaryList", posts);
            }
            var indexPageViewModel = new IndexPageViewModel
            {
                Posts = posts, Authenticated = authenticateResult.LoggedIn, Name = authenticateResult.Name,
                AvatarUrl = authenticateResult.AvatarUrl
            };
            
            return View(indexPageViewModel);
    }

Como usted' verá aquí utilizamos el IBlogService para obtener los últimos post de blog para la página principal. También utilizamos el GetUserInfo método para obtener la información del usuario de la página principal.

De nuevo esto tiene una petición HTMX para devolver la vista parcial de los post del blog para permitirnos que la página de los posts del blog en la página principal.

El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.

En nuestra próxima parte, “'”, vamos a entrar en detalles excruciadores de cómo utilizamos el IMarkdownBlogService para llenar la base de datos con los mensajes de blog a partir de los ficheros de marcación. Esta es una parte clave de la aplicación ya que nos permite utilizar los ficheres de marcamiento para llenarla con los artículos de blog.

logo

© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.