89 lines
4.2 KiB
Markdown
89 lines
4.2 KiB
Markdown
# 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:
|
|
|
|
```text
|
|
SIG.Web/
|
|
Pages/
|
|
Security/
|
|
Tramites/
|
|
Polizas/
|
|
```
|
|
|
|
Ejemplos futuros:
|
|
|
|
```text
|
|
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/`:
|
|
|
|
```text
|
|
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:
|
|
|
|
```text
|
|
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.
|