Files
Plataforma-de-desarrolladores/AGENTS_PAGE_STRUCTURE.md
Jorge Luis caudillo esparza 6685ef63fb Initial commit
2026-07-14 11:15:57 -07:00

4.2 KiB

Reglas obligatorias para la ubicación de páginas WebForms

Estas reglas complementan AGENTS.md y aplican a toda página .aspx nueva.

Raíz de páginas

  • SIG.Web/Pages/ es la raíz obligatoria para todas las páginas funcionales nuevas.
  • No agregar páginas de aplicación directamente dentro de SIG.Web/Pages/; cada página debe pertenecer a una subcarpeta de módulo.
  • Usar nombres de carpeta en PascalCase y conservar un solo nombre por módulo.

Estructura inicial:

SIG.Web/
  Pages/
    Security/
    Tramites/
    Polizas/

Ejemplos futuros:

Pages/Security/Usuarios.aspx
Pages/Security/Roles.aspx
Pages/Tramites/Solicitudes.aspx
Pages/Tramites/Seguimiento.aspx
Pages/Polizas/PrePolizas.aspx
  • Crear nuevas carpetas bajo Pages/ cuando aparezca un módulo real, por ejemplo Clientes, Fraccionamientos, Ventas, Catalogos o Reportes.
  • No crear carpetas vacías para módulos que todavía no existen, salvo las carpetas iniciales acordadas.
  • No colocar páginas de la aplicación dentro de Metronic, Scripts, Styles, Content, AppCode ni carpetas de paquetes o recursos de terceros.
  • Los ejemplos .aspx incluidos dentro de dependencias visuales de Metronic son archivos heredados del proveedor y no cuentan como páginas funcionales de la aplicación. No usarlos como destino para código nuevo.

Únicas páginas permitidas fuera de Pages

Las páginas de aplicación que actualmente están en la raíz son excepciones explícitas y son las únicas que pueden permanecer o existir fuera de Pages/:

AccessDenied.aspx
Inicio.aspx
Login.aspx
Logout.aspx
  • No agregar otra página .aspx en la raíz de SIG.Web.
  • No mover estas cuatro páginas sin una solicitud explícita, porque sus rutas forman parte del inicio, autenticación y manejo global de acceso.
  • Login.aspx sigue siendo la única página con estructura HTML completa propia.
  • Inicio.aspx y AccessDenied.aspx usan Site.master.
  • Logout.aspx puede permanecer como endpoint WebForms sin contenido visual.

Archivos relacionados

  • Mantener juntos los tres archivos de cada página:
Pages/Modulo/Pagina.aspx
Pages/Modulo/Pagina.aspx.cs
Pages/Modulo/Pagina.aspx.designer.cs
  • Incluir los tres archivos en SIG.Web.csproj con DependentUpon correcto.
  • Usar namespaces que reflejen la carpeta, por ejemplo SIG.Web.Pages.Security.
  • El atributo Inherits del .aspx debe coincidir exactamente con el namespace y la clase del code-behind.
  • Todas las páginas normales deben usar MasterPageFile="~/Site.master" y los placeholders H, C y J.
  • Todas las páginas normales deben heredar de ClsPaginaBase, salvo una excepción global documentada como Login, Logout o AccessDenied.

Rutas y permisos

  • Usar rutas virtuales completas, por ejemplo ~/Pages/Security/Usuarios.aspx.
  • Actualizar menús, módulos, permisos, redirecciones y breadcrumbs con la ruta real de la subcarpeta.
  • No depender de rutas relativas como ../ para navegación de la aplicación.
  • PermissionService y los procedimientos de acceso deben comparar la ruta incluyendo Pages/Modulo/.
  • Los enlaces generados deben pasar por ResolveUrl, VirtualPathUtility.ToAbsolute o el mecanismo central existente.

Arquitectura

  • La ubicación dentro de Pages/ no autoriza acceso directo a SQL.
  • El code-behind debe permanecer delgado y llamar contratos/servicios.
  • Toda operación de base de datos continúa usando procedimientos almacenados mediante repositorios.
  • Los modelos, contratos, servicios y repositorios no deben colocarse dentro de Pages/; permanecen bajo sus carpetas de AppCode.

Excepciones públicas de registro

Además de Login.aspx, las páginas Pages/Security/RegistroCliente.aspx, Pages/Security/RegistroPendiente.aspx y Pages/Security/VerificarCorreo.aspx pueden ser páginas públicas completas con su propio form runat="server". Son las únicas excepciones nuevas; las páginas autenticadas continúan usando Site.master y no declaran form. RegistroCliente.aspx debe manejar el borrador de ambos pasos en ViewState cifrado y no persistir información hasta terminar todas las validaciones. La persistencia final debe usar servicios/repositorios y un procedimiento almacenado transaccional.