Pregunta

Tengo una aplicación web ASP.NET MVC3 con C# y Razor.

A través de un formulario en una vista, obtengo el Context.User.Identity.Name enviado a un método de acción en un Controlador A.

Me gustaría tener disponible esta variable en toda la aplicación (entre múltiples controladores). Ahora puedo asignarlo a una variable global _Nombre de usuario dentro de Controlador A, pero, por supuesto, no está disponible en Controlador B.

¿Es posible hacer eso?

Gracias

Francesco

¿Fue útil?

Solución

Si está accediendo a esto en cualquier controlador, debe usar httpcontext.user.identity en sus métodos de controlador: estará disponible allí. No es necesario almacenar en la sesión.

Otros consejos

Cree un controlador principal desde el cual todos sus controladores heredan y establezcan la variable allí. Puede hacer varias cosas con él desde allí: envíelo en un modelo de vista, coloque algunos detalles del usuario en la bolsa de vista, etc.

public class UserController : Controller
{
    // create your own User class with as many properties as you need
    protected User user { get; set; }

    public UserController()
    {
        user = // get user from db, wherever
    }
}

Entonces, solo herede de UserController

public class ControllerA : UserController
{
    public ActionResult DoSomething()
    {
        user.Property = 123;
    }
}

Debe considerar el almacenamiento en caché y posiblemente utilizando el almacén de sesión de los usuarios esta información.

Verificar este pregunta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top