asp mvc: указание имени представления не меняет URL

У меня есть действие создания в моем контроллере для HttpPost. внутри этого действия я вставляю запись в базу данных, а затем возвращаю представление, указывающее другое имя действия, потому что я хочу перенаправить пользователя в другое место, например, в представление сведений только что созданной записи, и я передаю текущая модель, поэтому мне не нужно повторно загружать данные, которые они только что ввели. К сожалению, URL-адрес в адресной строке по-прежнему показывает исходное действие create.

[HttpPost]
public ActionResult Create(MyModel model)
{
    //Insert record
    ...
    //Go to details view, pass the current model
    //instead of re-loading from database
    return View("Details", model);
}

Как заставить URL-адрес вместо этого отображать "http://myapp/MyController/Details/1" из "http://myapp/MyController/Create/1"? Возможно ли это, или мне нужно делать редирект? Я надеюсь, что смогу избежать перенаправления ...


person Jeremy    schedule 02.01.2010    source источник


Ответы (2)


Я думаю, вы хотите использовать RedirectToAction() вместо View(). Обратите внимание на следующий вопрос: Как RedirectToAction в ASP.NET MVC без потери данных запроса

person M4N    schedule 02.01.2010

Вы должны сделать перенаправление, чтобы изменить URL-адрес в браузере.

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

Код будет выглядеть примерно так:

[HttpPost] 
public ActionResult Create(MyModel model) 
{ 
    //Insert record 
    ... 
    return RedirectToAction("Details", new { id = model.ID }); 
} 

Одна из причин, по которой вы хотите выполнить здесь перенаправление, заключается в том, чтобы пользователь мог нажать кнопку «Обновить» в браузере и не получить надоедливое диалоговое окно «Не хотите ли вы снова опубликовать данные».

Такое поведение часто называют «Post-Redirect-Get» или сокращенно «PRG». См. Статью в Википедии для получения дополнительной информации о PRG: Post / Redirect / Get

person Eilon    schedule 02.01.2010