2010-01-02 28 views
6

Tôi có một hành động tạo trong bộ điều khiển cho HttpPost. bên trong hành động đó, tôi chèn bản ghi vào db và sau đó trả về một khung nhìn chỉ định một tên hành động khác, vì tôi muốn đưa người dùng đến một nơi khác, chẳng hạn như chế độ xem chi tiết của bản ghi mà họ vừa tạo và tôi chuyển vào mô hình hiện tại vì vậy tôi không phải tải lại dữ liệu mà họ vừa nhập. Rất tiếc, url trong thanh địa chỉ vẫn hiển thị hành động tạo ban đầu.asp mvc: chỉ định tên chế độ xem không thay đổi 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); 
} 

Làm thế nào để tôi có được url để hiển thị "http://myapp/MyController/Details/1", thay vì "http://myapp/MyController/Create/1"? Có thể không, hoặc tôi có phải thực hiện chuyển hướng không? Tôi hy vọng tôi có thể tránh chuyển hướng ...

Trả lời

4

Bạn phải thực hiện chuyển hướng để thay đổi URL trong trình duyệt.

Tên chế độ xem bạn chuyển vào chỉ cho MVC biết chế độ hiển thị. Đó là một chi tiết thực hiện của ứng dụng của bạn.

Mã sẽ giống như thế:

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

Một trong những lý do bạn muốn để làm một chuyển hướng ở đây là để người dùng có thể nhấn nút Refresh trên trình duyệt và không nhận được rằng pesky " bạn muốn đăng lại dữ liệu "hộp thoại.

Hành vi này thường được gọi là "Sau khi chuyển hướng-Nhận" hoặc "PRG". Xem bài viết trên Wikipedia để biết thêm thông tin về PRG: Post/Redirect/Get

Các vấn đề liên quan