Передача данных с контроллера на главную страницу - в зависимости от текущего пользователя, вошедшего в систему - PullRequest
1 голос
/ 10 января 2011

Использование MVC2

Иметь главную страницу, которая должна скрывать определенные меню, если в данный момент вошедший в систему пользователь не имеет правильных флагов.

Похоже на распространенную проблему.Найдены примеры, которые требуют, чтобы все контроллеры наследовали от базового контроллера (у меня это есть) и где в конструкторе базового контроллера может происходить передача определенных параметров в ViewData.Это здорово, и мне было бы легко это сделать, но объекты User.Identity и Request при создании базового контроллера имеют значение NULL.

Как мне получить User.Identity вошедшего в систему пользователя, чтобыЯ могу запросить базу данных и соответствующим образом изменить коллекцию ViewData перед отображением главной страницы?

Спасибо

1 Ответ

1 голос
/ 10 января 2011

Вы можете использовать дочерние действия вместе с помощниками Html.Action и Html.RenderAction .Таким образом, у вас может быть действие контроллера, которое возвращает модель представления, указывающую текущую вошедшую в систему информацию о пользователе:

public MenuController: Controller
{
    public ActionResult Index()
    {
        // populate a view model based on the currently logged in user
        // User.Identity.Name
        MenuViewModel model = ...
        return View(model);
    }
}

и иметь соответствующий строго типизированный частичный вид, который будет отображать меню или нет.И, наконец, внутри главной страницы есть меню:

<%= Html.Action("Index", "Menu") %>

Таким образом, вы можете иметь совершенно отдельную модель представления, репозиторий и контроллер для меню.Вы все еще можете использовать инжектор конструктора для этого контроллера, и все остается строго типизированным.Конечно, для основного контроллера будет совершенно другая модель представления, основанная на текущей странице.Вам не нужно иметь базовые контроллеры или модель базового представления, которую должны возвращать все ваши действия.

...