Как обрабатывать общие данные между контроллером и представлением в ASP.NET MVC? - PullRequest
0 голосов
/ 14 декабря 2010

У нас есть модель (скажем, List<string>). Функция, которая создает список, является недетерминированной, и на выход необходимо ссылаться как в контроллере, так и в представлении в течение срока действия запроса. Поскольку это запрос, он не может быть статическим или одноэлементным.

Это общая структура, и на нее можно ссылаться из любого представления или контроллера.

Поскольку мы не можем получить доступ к контроллеру из представления (в принципе, и мы согласны), мы не можем хранить его в контроллере. В настоящее время мы храним его в словаре ViewData и инициализируем в контроллере или в представлении (если контроллеру это не нужно).

Мы думаем, что использование ViewData для этой цели может быть не идеальным, поскольку оно не создано для использования контроллером. Есть ли лучший способ для обмена общими данными по запросу между контроллером и представлением? Если нет, мы будем придерживаться ViewData.

Есть словарь HttpContext.Items, но я не уверен, подходит ли он для этой цели.

Ответы [ 3 ]

1 голос
/ 14 декабря 2010

на выход необходимо ссылаться как в контроллере, так и в представлении в течение срока действия запроса

Как работает MVC, выполняется код Action в контроллере, и полученные данные передаются в механизм представления, который рисует страницу, используя информацию, переданную вами при вызове View (data) или в словаре ViewData .

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

Не могли бы вы объяснить, зачем вам нужен контроллер во время рендеринга вида? Если вам нужна какая-либо логика, связанная со списком (чтобы обработать его или что-то с ним сделать), я бы просто создал новый класс, расширяющий список , добавил бы логику к этому классу вместо контроллера и передал объект этого Класс для просмотра, либо с помощью View () или ViewData [].

0 голосов
/ 17 декабря 2010

Что именно вы пытаетесь сделать?

Похоже, вы просто спрашиваете о способе передачи некоторых данных из контроллера в представление, что является довольно тривиальной задачей.Просто используйте ViewData, yes или ViewBag в случае MVC3 или используйте ViewModels.

Или есть какой-то особый случай?Что означает «ссылки из контроллера и из представления»?Откуда поступают данные?Обычно дело в том, что Контроллер подготавливает данные для представления и передает их как ActionResult (или, лучше, как ViewModel).View никогда не должен принимать некоторые данные в обход контроллера.

0 голосов
/ 14 декабря 2010

Действие контроллера всегда должно вызываться первым.Если у вас есть несколько контроллеров, вызывающих одно и то же представление / частичное представление, вам следует рефакторинг кода для одного метода и вызова этого.

ViewData - решение для этого, если вы действительно хотите получить информацию типа «один раз»тогда, возможно, TempData, но ViewData предназначен для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...