Перенаправить сообщение Получить Скрыть параметры URL

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

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

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

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

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

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

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

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

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

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

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

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

3 ответа

Решение

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

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

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

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

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


Обновить:

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

Session["AlbumId"] = model.AlbumId;
...
int albumId = (int)Session["AlbumId"];

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

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

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

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