ASP.NET MVC 4 Запомнить страницу указатель - PullRequest
1 голос
/ 29 февраля 2012

В приложении ASP.NET MVC 4 у меня есть представление с разбитым на страницы списком (просто простая таблица, без телерика сетки или чего-то в этом роде) Новые значения выбираются из базы данных, когда пользователь просматривает список.

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

URL-адреса для представления списка выглядят следующим образом

http://localhost/Items/Page/1
http://localhost/Items/Page/2

Маршрут выглядит так

routes.MapRoute(
        name: "ItemsList",
        url :"Items/Page/{page}",
        defaults: new { controller = "Items", action = "Index", page = 1 },
            constraints: new {page = @"\d+"}
        );

У меня такой вопрос: какой предпочтительный, наиболее распространенный способ сохранить URL-адрес ссылки, поэтому после завершения редактирования элемента я могу перенаправить пользователя обратно на правильный URL-адрес

http://localhost/Items/Page/2

, а не только

http://localhost/Items

Я пытался разделить

Request.UrlReferrer.PathAndQuery

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

Обновление

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

Есть какие-нибудь мысли об этом подходе?

1 Ответ

1 голос
/ 10 марта 2012

Вот мое окончательное решение проблемы, оно не супер элегантное, но работает. Я добавил в модель View свойство, которое может хранить URL. Это значение get хранится в скрытом поле.

public class SkillEditModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string RedirectBackToUrl { get; set; }
}

В методе контроллера Edit (GET) я сохраняю значение с моделью представления

if (!Request.UrlReferrer == null)
{
    model.RedirectBackToUrl = Request.UrlReferrer.PathAndQuery;
}

И, наконец, после сохранения изменений в Edit (POST) я сделал это

if (!string.IsNullOrWhiteSpace(model.RedirectBackToUrl))
{
    return new RedirectResult(model.RedirectBackToUrl);
}

return RedirectToAction("Index");
...