Совместное использование объекта в ASP.NET MVC3

У меня есть веб-приложение ASP.NET MVC3 с C# и Razor.

Через форму в представлении я получаю Context.User.Identity.Name представлены в метод действия в контроллере A.

Я хотел бы иметь эту переменную в приложении (между несколькими контроллерами). Теперь я просто могу назначить его глобальной переменной _UserName в контроллере A, но, конечно, он недоступен в контроллере B.

Возможно ли это сделать?

Спасибо

Francesco

3 ответа

Решение

Если вы обращаетесь к этому на любом контроллере, вы должны использовать HttpContext.User.Identity в ваших методах контроллера - он будет доступен там. Нет необходимости хранить в сессии.

Создайте родительский контроллер, от которого наследуются все ваши контроллеры, и установите переменную там. Оттуда вы можете сделать несколько вещей - обернуть это в модель представления, поместить некоторые пользовательские данные в ViewBag и т. Д.

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
    }
}

Тогда просто наследуй от UserController

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

Вы должны изучить кеширование и, возможно, использовать эту информацию в пользовательском сеансе.

Проверьте этот вопрос.

Другие вопросы по тегам