2010-01-02 5 views
6

내 컨트롤러에서 HttpPost에 대한 생성 작업이 있습니다. 그 작업 내에서 db에 레코드를 삽입 한 다음 다른 작업 이름을 지정하는보기를 반환합니다. 왜냐하면 방금 작성한 레코드의 상세보기와 같이 다른 곳으로 사용자를 데려 가기를 원하기 때문입니다. 현재 모델이므로 방금 입력 한 데이터를 다시로드 할 필요가 없습니다. 불행히도 주소 표시 줄의 URL에는 원래 작성 액션이 표시됩니다.asp mvc :보기 이름을 지정해도 URL이 변경되지 않습니다.

[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); 
} 

어떻게 대신 "http://myapp/MyController/Create/1"의, URL이 "http://myapp/MyController/Details/1"을 보여주기 위해 어떻게해야합니까? 가능합니까, 아니면 리디렉션을해야합니까? 나는 리디렉션을 피할 수 있기를 바라고 있습니다 ...

답변

4

브라우저의 URL을 변경하려면 리디렉션을해야합니다.

전달한 뷰 이름은 MVC에 렌더링 할 것을 알립니다. 애플리케이션의 구현 세부 사항입니다.

과 같이 보일 것이다 코드

: 당신이 여기 리디렉션을 수행 원하는 이유

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

하나는 사용자가 브라우저에서 새로 고침 버튼을 누르면하고 "그 성가신을 얻을 수 있도록입니다 다시 데이터를 게시 하시겠습니까? "대화 상자가 나타납니다.

이 동작을 종종 "Post-Redirect-Get"또는 줄여서 "PRG"라고합니다. PRG에 대한 자세한 내용은 Wikipedia 기사를 참조하십시오. View() 대신 RedirectToAction()을 사용하고 싶습니다. PRG에 대한 자세한 내용은 Post/Redirect/Get

관련 문제