2011-12-17 15 views
5

Tôi đang làm gì sai với mã MVC của mình ở đây? Chế độ xem Chỉ mục bao gồm biểu mẫu gửi đến chính nó, điều tôi muốn là trình điều khiển xử lý biểu mẫu đã gửi và sau đó quay lại Chế độ xem.RedirectToAction không làm mới trang như mong đợi

Điều gì thực sự xảy ra là biểu mẫu được xử lý chính xác, nhưng Chế độ xem được trả về như thể không có gì xảy ra (ví dụ: id đã bị xóa vẫn được hiển thị). Nếu tôi làm mới trang theo cách thủ công, nó sẽ hiển thị lại chính xác. Tôi không nghĩ rằng đó là bộ nhớ đệm broswer liên quan, như chuyển hướng đến xem cùng từ một bộ điều khiển khác nhau hoạt động tốt. Làm thế nào tôi có thể sửa chữa nó ?

public ViewResult Index() 
    { 
     return View(GetComments()); 
    } 


    [HttpPost] 
    public ActionResult Index(int[] AllIds) 
    { 
     if (AllIds != null) 
     { 
      foreach (int id in AllIds) 
      { 
       // do stuff 
      } 
     } 

     return RedirectToAction("Index"); 
    } 

Chỉnh sửa: Khi submit form, breakpoint vào phương pháp đầu tiên không phải là hit và cố gắng để "Step Into (F11)" dòng return RedirectToAction("Index"); chỉ di chuyển thẳng lên } thức để thay thế.

+0

Vì vậy, POST cập nhật dữ liệu được truy xuất bởi GetComments()? Sau POST, GetComments() sẽ trả về dữ liệu khác nhau? – danludwig

+0

Có, POST cập nhật/xóa cùng dữ liệu như GET chọn. – mikel

Trả lời

4

Cài đặt Fiddler hoặc Firebug cho Firefox và xem lưu lượng truy cập, xem nó thực sự trả về phản hồi mới hoặc HTTP 304 từ trình duyệt (trang được lưu trong bộ nhớ cache). Nếu mọi thứ kiểm tra thì bạn có vấn đề với sự kiên trì và truy vấn db của bạn.

1

Bạn đã thử cái này chưa? Tôi tự hỏi, tùy thuộc vào cách bạn lưu giữ dữ liệu, nếu nó không được lưu cho đến khi máy chủ trả về một phản hồi ..?

public ViewResult Index() 
{ // breakpoint 
    var comments = GetComments(); // debug and inspect the value of this variable 
    return View(comments); 
} 


[HttpPost] 
public ActionResult Index(int[] AllIds) 
{ 
    if (AllIds != null) 
    { 
     foreach (int id in AllIds) 
     { 
      // do stuff 
     } 
    } 

    return RedirectToAction("Index"); // breakpoint 
} 

Tôi biết một số người sử dụng IUnitOfWork trong MVC chỉ gọi SaveChanges/Commit trên ORM khi kết thúc yêu cầu. Có thể là công cụ // do đó loại bỏ các mục khỏi bộ sưu tập, nhưng không tồn tại với db cho đến SAU KHI chỉ mục GET() được trả về?

Cập nhật

Thay vì trở lại RedirectToAction("Index"), Bạn đã thử RedirectToAction(Index())?

0

Thử nhập tên bộ điều khiển. Điều đó đã giúp tôi. Ví dụ:

return RedirectToAction("Index","Home");