En 2025, .NET Razor sigue siendo una de las tecnologías más eficientes para crear UIs dinámicas y seguras, especialmente en aplicaciones empresariales o integradas con APIs modernas.
En este artículo te compartiré las mejores prácticas para trabajar con Razor en .NET 9, con ejemplos reales, errores comunes que debes evitar y consejos basados en mi experiencia práctica en proyectos profesionales.
¿Qué es .NET Razor?
Razor es un motor de plantillas para .NET que permite combinar C# con HTML de forma fluida. Se utiliza principalmente en Razor Pages, MVC Views y componentes Blazor.
Un archivo Razor tiene extensión .cshtml (en Razor Pages y MVC) o .razor (en Blazor) y permite escribir código como:
<h1>Hola, @Model.Nombre</h1>
<p>Hoy es @DateTime.Now.ToShortDateString()</p>
¿Por qué es importante en 2025?
En un mundo dominado por frameworks como React o Next.js, Razor sigue siendo relevante porque:
- Permite SSR (renderizado del lado del servidor) con excelente rendimiento.
- Es ideal para backoffice, intranets y dashboards empresariales.
- Es compatible con Blazor, facilitando la transición a SPAs si se requiere.
- .NET 9 ha optimizado aún más la compilación y la separación de lógica UI.
Además, Razor es una excelente opción cuando trabajas con arquitecturas limpias, DDD o microservicios con una interfaz ligera.
Cómo implementar una página Razor desde cero
Paso 1: Crear el proyecto
dotnet new razor -n MiAppRazor
cd MiAppRazor
dotnet run
Esto genera una estructura con:
Pages/→ Archivos.cshtmlProgram.csyStartup.csobuilder(en .NET 6+)
Paso 2: Crear una página Razor personalizada
Crea el archivo Pages/MiPagina.cshtml:
@page
@model MiPaginaModel
<h2>Bienvenido, @Model.Nombre</h2>
Y su clase code-behind MiPagina.cshtml.cs:
public class MiPaginaModel : PageModel
{
public string Nombre { get; set; } = "Desarrollador .NET";
public void OnGet()
{
// Lógica del lado del servidor
}
}
Mejores prácticas para Razor en .NET 9
1. Separar lógica de presentación y backend
Evita poner lógica de negocio en archivos .cshtml. Usa PageModel o ViewModel para mantener limpio el código HTML.
2. Usar Tag Helpers en lugar de HTML hardcodeado
Mal:
<form method="post" action="/Login">
<input type="text" name="usuario" />
</form>
Bien:
<form asp-page="/Login" method="post">
<input asp-for="Usuario" class="form-control" />
</form>
Los Tag Helpers mejoran la seguridad y mantienen la coherencia con rutas y modelos.
3. Evitar lógica compleja en la vista
@* Mala práctica *@
@if (user.IsAdmin && DateTime.Now.DayOfWeek == DayOfWeek.Monday)
{
<p>Es lunes y eres admin</p>
}
En su lugar, prepara esta lógica en el PageModel.
Errores comunes y cómo evitarlos
❌ Usar ViewBag o ViewData en lugar de modelos fuertemente tipados
- Esto rompe el tipado y complica el mantenimiento.
- Usa modelos con propiedades claras y validadas.
❌ No usar validaciones del lado del cliente
.NET permite usar DataAnnotations para validar campos automáticamente:
En su lugar, prepara esta lógica en el PageModel.
Errores comunes y cómo evitarlos
❌ Usar ViewBag o ViewData en lugar de modelos fuertemente tipados
Esto rompe el tipado y complica el mantenimiento.
Usa modelos con propiedades claras y validadas.
❌ No usar validaciones del lado del cliente
.NET permite usar DataAnnotations para validar campos automáticamente:
csharp
Copiar
Editar
[Required]
[StringLength(50)]
public string Nombre { get; set; }
Y en la vista:
<input asp-for="Nombre" class="form-control" />
<span asp-validation-for="Nombre" class="text-danger"></span>
Preguntas frecuentes
¿Razor es compatible con Blazor?
Sí, Blazor usa Razor para sus componentes, pero con sintaxis diferente (.razor en lugar de .cshtml). Puedes migrar Razor Pages a Blazor si necesitas una SPA.
¿Razor sigue siendo relevante frente a React o Vue?
Definitivamente. Razor es ideal para aplicaciones internas, sistemas empresariales y proyectos donde el SEO no es prioritario o se prefiere SSR nativo.
¿Puedo usar Razor con APIs externas?
Sí, puedes consumir APIs REST o gRPC en el backend y mostrar los datos en Razor usando el patrón PageModel.
Ejemplo práctico: página Razor que consume una API REST
public class MiPaginaModel : PageModel
{
public List<Producto> Productos { get; set; }
public async Task OnGet()
{
using var client = new HttpClient();
var json = await client.GetStringAsync("https://api.misitio.com/productos");
Productos = JsonSerializer.Deserialize<List<Producto>>(json);
}
}
@foreach (var producto in Model.Productos)
{
<div>@producto.Nombre - $@producto.Precio</div>
}
Recursos oficiales y documentación actualizada
- Documentación oficial Razor Pages (.NET 9)
- Tag Helpers Reference
- ASP.NET Community Standup (YouTube)
Conclusión
Trabajar con Razor en .NET 9 no solo es viable en 2025, sino altamente recomendable para ciertos tipos de proyectos. Aplicar buenas prácticas como separación de responsabilidades, uso de Tag Helpers y validación desde el modelo mejora la mantenibilidad, seguridad y rendimiento de tus aplicaciones.


