Перенаправить сообщение Получить Скрыть параметры URL - PullRequest
1 голос
/ 12 декабря 2011

Позвольте мне сначала попытаться установить сценарий здесь.Это делается с помощью ASP.NET 4.0, MVC3 и C #.

У меня есть галерея изображений.У меня есть менеджер для альбомов в картинной галерее.Каждая галерея имеет набор страниц.

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

В списке альбомов есть варианты для редактирования., удалить или управлять страницами в этом альбоме.

При выборе управления страницами для альбома отображается список страниц, каждая из которых имеет редактирование, удаление и просмотр.

КогдаКнопка редактирования для страницы выбрана, и изменения сделаны, затем сохранены, моя проблема обнаружена.

Кнопка, чтобы перейти к списку страниц для управления из списка альбомов, отправляет идентификатор по почте, чтобы скрытьalbumid и другие параметры.

Таким образом, представление для страниц генерируется контроллером [HttpPost].Затем в представлении для управления страницами при нажатии кнопки редактирования страница для редактирования генерируется из контроллера [HttpPost] по той же причине (чтобы скрыть параметры).

Вот проблема: после нажатия кнопки сохранения в представлении редактирования данные публикуются в контроллере сохранения изменений через [HttpPost], но я не хочу возвращать представление редактирования (обновление будет повторять изменения).и это не совсем лучшая практика).Я хочу вернуться к списку страниц для выбранного альбома.При этом я использую [HttpPost] из контроллера редактирования для перенаправления обратно в контроллер [HttpGet] для представления, в котором перечислены страницы для выбранного альбома.Когда я это делаю, вызов выглядит следующим образом:

return RedirectToAction("ManagePages", new { albumId = model.AlbumId });

К сожалению, в URL отображается идентификатор альбома: http://XXX/ManagePages?AlbumId=56.

Как я могу вернуться к представлению ManagePages длятот же выбранный альбом без отображения идентификатора альбома в списке параметров?

Ответы [ 3 ]

1 голос
/ 12 декабря 2011

Вы можете сохранить идентификатор альбома в TempData непосредственно перед выполнением перенаправления, используя:

TempData["AlbumId"] = model.AlbumId;
return RedirectToAction("ManagePages");

Затем в действии ManagePages GET вы можете прочитать содержимое идентификатора:

int albumId = (int)TempData["AlbumId"];

Примечание. После считывания идентификатора содержимое TempData ["AlbumId"] будет очищено.


Обновление:

На самом деле, если вы используете TempData и пользователь нажимает кнопку «Обновить», тогда данные будут потеряны при обновлении. Следовательно, вместо этого вы можете использовать сеанс:

Session["AlbumId"] = model.AlbumId;
...
int albumId = (int)Session["AlbumId"];
0 голосов
/ 12 декабря 2011

Вы можете скрыть идентификатор в переменной TempData.TempData сохраняется через одно перенаправление.

0 голосов
/ 12 декабря 2011

Перед выполнением RedirectToAction вы можете установить cookie с идентификатором альбома.Затем вы читаете это в действии ManagePages.

Тем не менее, стоит отметить, что если вы не уверены, что внутренние идентификаторы известны извне, ваше приложение все равно предоставляет их через источник HTML.Другие пользователи могут использовать их для просмотра данных, к которым они не относятся, если у вас нет какого-либо механизма аутентификации.

...