2011-06-07 13 views
5

Para mi proyecto Orchard, necesito información adicional del usuario en el momento del registro. (Decir, nombre, apellido, color de los pantalones). Esta información debe ingresarse durante el registro y no puede diferirse hasta más tarde (según las órdenes del cliente).Orchard: campos de registro personalizados

Intenté utilizar los plugins Profile y Extended Registration para solicitarlos, pero, por lo que veo, esto solo me da campos opcionales para mostrar en el formulario de registro. ¿Hay alguna manera de presentar los campos que son obligatorios?

También tuve una rápida incursión en sobrescribir el método del AccountController Register, según this discussion, pero no pude conseguir que funcione: El controlador está en un lugar diferente, no puede tener subclases e incluso si fuerzo a, el código nunca se ejecuta. Supongo que están usando una versión mucho más antigua de Orchard.

Entonces, ¿en qué dirección debo ir para crear un campo obligatorio que esté cerca de la filosofía de Orchard? ¿Debo crear un nuevo tipo de campo que rechace los valores vacíos? (¿Eso es posible?)

Respuesta

6

Escribí el módulo ExtendedRegistration debido a esa misma necesidad. Debe crear una pieza personalizada, por ejemplo, MyRegistrationPart. Luego agrega esa parte al User ContentType. En su parte simplemente agregue el atributo [Requerido] (Anotaciones de datos) a cualquier propiedad que sea obligatoria. ¡El registro no tendrá éxito hasta que se hayan completado esos valores obligatorios!

Espero que esté claro ahora.

+0

Gracias, eso es lo que terminé haciendo. Ah, y muchas gracias por escribir ese módulo. – winsmith

3

Si bien es probable que esto no responda a su pregunta, solo quería señalar que tengo entendido que no necesita anular/subclase la clase AccountController. En su lugar, debe "sobrescribir" la ruta Users/Account/Register añadiendo la suya con una prioridad más alta. Para hacer eso, necesita implementar un IRouteProvider como parte de nuestro módulo. Como es una dependencia ID, se cargará y procesará automágicamente en tiempo de ejecución. Algo como:

public class Routes : IRouteProvider 
{ 
    public void GetRoutes(ICollection<RouteDescriptor> routes) 
    { 
     routes.AddRange(GetRoutes()); 
    } 

    public IEnumerable<RouteDescriptor> GetRoutes() 
    { 
     return new[] { 
      new RouteDescriptor { 
       // Make sure to be higher than the default 
       Priority = ##### PRIORITY HERE (int) ######, 
       Route = new Route(
       "Users/Account/Register", 
       new RouteValueDictionary { 
        {"area", "#### YOUR MODULE AREA HERE ####"}, 
        {"controller", "#### YOUR ACCOUNT CONTROLLER HERE ####"}, 
        {"action", "#### YOUR REGISTER ACTION HERE ####"} 
       }, 
       new RouteValueDictionary(), 
       new RouteValueDictionary { 
        {"area", "#### YOUR MODULE AREA HERE ####"} 
       }, 
       new MvcRouteHandler()) 
      } 
     }; 
    } 
} 
+0

Puedo agregar que tratar de anular realmente un método de controlador es muy complicado y probablemente no valga la pena. Hoy aprendí ... – winsmith

+0

Gracias Ivan! Utilicé este método para "sobreescribir" la ruta a Usuarios/Cuenta/AccesoDeniado para poder gestionar la representación de la página de inicio de sesión. Además, parece que Orchard 1.4 usa la ruta OrchardLocal/Users/Account/LogOn para manejar el inicio de sesión real. –

Cuestiones relacionadas