Pero para entender su utilidad, creo que lo mejor es comenzar por un ejemplo de componente simple como el siguiente, que se encarga de mostrar una colección de objetos
Friend
formateados de una manera determinada:@* File: ItemList.razor *@
@{
var count = 1;
foreach (var item in Items)
{
<div class="counter">Item #@(count++)</div>
<div class="item">
@ChildContent(item)
</div>
}
}
@code
{
[Parameter]
public IEnumerable<Friend> Items { get; set; }
[Parameter]
public RenderFragment<Friend> ChildContent { get; set; }
}
Fijaos que estamos utilizando un RenderFragment
tipado. Si no sabes muy bien lo que es esto, puedes echarle un vistazo al post Componentes con cuerpo en Blazor.
Como hemos podido comprobar, lo único que hace el componente <ItemList>
es recorrer la colección de amigos disponible en la propiedad Items
y, por cada elemento, mostrar un contador que va incrementándose en cada iteración, renderizando el RenderFragment<Friend>
con el ítem actual.<ItemList>
podría ser utilizado desde cualquier otro componente, por ejemplo, de la siguiente manera:<h1>My friends</h1>
<ItemList Items="@Friends">
<p>@context.Name is @context.Age years old</p>
</ItemList>
@code {
public Friend[] Friends { get; set; }
protected override void OnInitialized()
{
Friends = new[] {
new Friend() {Name = "John", Age = 32},
new Friend() {Name = "Peter", Age = 23},
new Friend() {Name = "Ally", Age = 31}
};
}
}
Si ejecutamos un código como el anterior, podremos que ver todo es correcto: la lista de amigos se muestra correctamente. Bueno, todo es correcto, excepto cuando nos preguntamos si este mismo componente podría servir para otros tipos de objeto distintos a Friend
.Esto lo hemos vivido ya antes, muchos años atrás, cuando aún no existían los tipos genéricos en C# y .NET. Porque lo que realmente nos interesaría para lograr una mayor reutilización de código es que el componente
<ItemList>
fuera genérico y pudiera aplicarse a cualquier tipo de datos.Publicado por José M. Aguilar a las 8:05 a. m.
Etiquetas: blazor, blazorserver, blazorwasm
El código de estado HTTP 413, "Payload too large", es retornado por los servidores cuando el tamaño de los datos que está recibiendo es demasiado grande y, por tanto, deben ser rechazados. El servidor puede cerrar en esos momentos la conexión para evitar que el cliente continúe enviando datos y, sólo si el problema es transitorio, enviar un encabezado Retry-After
para indicar en cuánto tiempo puede volver a intentarse la operación.
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Describiendo APIs ASP.NET Core con Swagger
José María Aguilar - Flushing asíncrono en ASP.NET Core MVC
José María Aguilar
.NET Core / .NET
- Announcing .NET 5.0 RC 1
Richard Lander - C#9 - Top Level Programs
Eduard Tomás - The future of .NET Standard
Immo Landwerth - Understanding Dependency Injection in .NET Core with Quartz.NET example
Bohdan Stupak - Things you need to know as a C# developer - Collections
Sam Fields - .NET Async Programming in a Nutshell
Nelson Parente - C# 9.0: Target-typed expression
Miguel Bernard - .NET Performance Optimisations Don't Have to be Complex - Steve Gordon
Steve Gordon - How to Convert Existing WinForms/WPF Projects to .NET Core
Desislava Yordanova - 6 Easy Ways to Split a PDF Document Using C#
Praveen Kumar - Using OpenAPI with .NET Core
Tom Deseyn - Cross platform diagnostic tools for .NET Core & dotnet-trace for .NET Core tracing in PerfView, SpeedScope, Chromium Event Trace Profiling, Flame graphs and more!
Scott Hanselman
¡Os traigo buenas noticias! Me complace anunciaros que por fin está disponible en el catálogo de CampusMVP el curso en el que he estado trabajando intensamente durante varios meses, y que me consta que muchos estabais esperando: Desarrollo de aplicaciones Web con Blazor.
Su creación ha sido bastante laboriosa porque queríamos ofreceros el mejor y más completo curso sobre Blazor que podéis encontrar en este momento, y no es fácil conseguirlo cuando se trata de una tecnología tan reciente, de la que aún no existe tanta documentación, bibliografía y ejemplos como las hay de otras tecnologías con más años de recorrido. Ha sido duro, pero tanto un servidor como el equipo de producción de CampusMVP que ha participado en su creación, estamos orgullosos del resultado y firmemente convencidos de que lo que hemos logrado: un recorrido práctico, minucioso y profundo del que es, sin duda es el framework que cambiará vuestra forma de desarrollar aplicaciones para la web.
En este post vamos a intentar resolver las siguientes cuestiones:
- ¿Qué es Blazor?
- ¿Me interesa aprender a desarrollar con Blazor?
- Hace poco aprendí ASP.NET Core, ¿significa esto que ya no me valen estos conocimientos?
- ¿En qué consiste el curso de desarrollo con Blazor?
- ¿Cuáles son los contenidos del curso?
- ¿Qué conocimientos previos necesito para seguir el curso?
- Me convence, ¿cuándo empezamos?
Estimadas, estimados, ¡ya estamos de vuelta!
Tras dos meses de parón blogosférico, durante los cuales he andado bastante atareado con otros menesteres, volvemos a la carga. Y no había mejor forma de hacerlo que publicando la entrega número 412 de la serie de enlaces interesantes, que seguro echabais de menos cada lunes ;)
Y por cierto, ya que ha salido el tema, el código de error HTTP 412 (Precondition failed) se produce cuando el acceso a un recurso es denegado debido a que no se cumplió algunas de las precondiciones especificadas a través de encabezados como If-Match
, If-Modified-Since
, If-None-Match
o similares. El objetivo es evitar la ejecución de la acción (GET, POST, etc.) sobre un recurso que se encuentra en un estado incorrecto.
Por si te lo perdiste...
- ¿Qué es Blazor, eso de lo que todo el mundo habla?
José María Aguilar - ¿Quién libera las dependencias cuando finaliza el proceso de una petición en ASP.NET Core?
José María Aguilar
.NET Core / .NET
- Calling Windows APIs in .NET5
Windows Developer - .NET 5 - What you need to know about the latest .NET
Damir Arh - It's 2020 and it is time for text mode with Gui.cs
Scott Hanselman - Producer/consumer pipelines with System.Threading.Channels
Maarten Balliauw - Customizing Trimming in .NET 5
Sam Spencer - Assembly Versioning and DLL Hell in C# .NET: Problems and Solutions
Michael Shpilt - Create a Text File in C#
Mahesh Chand - How to use Async with thread-unsafe objects?
Ahmed Fouad - C# 9.0: Target-typed New Expressions – Make Your Initialization Code Less Verbose
Thomas Claudius Huber - C# 9.0: Improved pattern matching
Miguel Bernard - "await Task.WhenAll" Shows One Exception
Jeremy Clark
La palabra vacaciones, derivada del latín vacans, participio del verbo vacare (estar libre, desocupado), está definida por la RAE como "Período del año en el que los trabajadores descansan temporalmente del trabajo". Y creo que ha llegado la hora de aplicarla, aunque no sea en toda su extensión :)
Como es habitual por estas fechas, os informo que la semana que viene iniciaré mi descanso veraniego, y el blog quedará en modo de bajo consumo hasta septiembre. Durante este tiempo seguiré trabajando en otras cosas (tengo grandes proyectos en curso, ya os iré contando ;)) pero al menos podré hacer jornadas más cortas y descansar un poco los fines de semana, que falta hace.
¡Nos vemos a la vuelta!
Publicado en Variable not found.
Como recordaréis del post anterior, la invocación de métodos estáticos era bastante sencilla, porque básicamente desde Javascript sólo teníamos que conocer el nombre del ensamblado donde se encontraba el código y el nombre del método a ejecutar. El hecho de que el método fuera estático es una ventaja, pues no hay "piezas móviles" en el puzzle.
Sin embargo, si desde Javascript queremos invocar un método de instancia, la cosa se complica un poco porque tendremos que ayudar a Blazor a determinar de qué instancia se trata, y esto a priori no suena sencillo porque Javascript y Blazor viven en dos mundos diferentes (de hecho, en el caso de Blazor Server incluso están físicamente separados). Sin embargo, veremos que las herramientas que ofrece el framework son suficientes para llevarlo a cabo sin liarnos demasiado.
Esta última entrega la dedicaremos precisamente a esto: aprender cómo podemos llamar desde Javascript a métodos de instancia escritos en C#.
Publicado por José M. Aguilar a las 8:05 a. m.
Etiquetas: blazor, blazorinterop, blazorserver, blazorwasm