2012-04-12 38 views
12

Tôi hiện đang làm việc danh sách dữ liệu mà tôi cần hiển thị trong dạng xem thể hiện danh sách và hiển thị cho mỗi mục hành động tương ứng có thể được thực thi, như chỉnh sửa hoặc xóa chúng. Đối với các ấn bản không có vấn đề thừa nhận rằng đó là một cái nhìn cụ thể. Vấn đề của tôi là khi tôi muốn xóa một mục, tôi có hai lựa chọn trong phương thức post.MVC3 RedirectToAction trong phương thức post và ức chế ViewBag

//Call directly the list 
[HttpPost] 
[Authorize] 
public ActionResult Delete(int itemId) 
{ 
    // logic to delete an item 
    ViewBag.Error = ""; // The result of the execution 
    return List(); 
} 

Điều với giải pháp này là url không còn giống như địa chỉ đầu tiên: .../Danh sách, nó .../Xóa ngay bây giờ, tôi không tìm thấy giải pháp này tuyệt vời, giải pháp khác là chuyển hướng đến hành động, bây giờ url là tốt, nhưng thông báo lỗi trong viewBag không còn nhìn thấy được nữa, các bạn có ý tưởng hay hơn không.

Trả lời

35

Bạn có thể sử dụng TempData để tồn tại thông tin trên một yêu cầu và nó có nghĩa là cho trường hợp sử dụng chính xác này. Thay vì sử dụng ViewBag, hãy sử dụng TempData["Error"] = ""; thay thế. Sau đó, vào cuối nhận bạn sẽ có một đoạn như sau:

[HttpGet] 
public ActionResult List() { 
    ViewBag.Error = TempData["Error"]; 
    // ... 
    return View(); 
} 

Xem ASP.NET TempData persists between requestsWhen to use ViewBag, ViewData, or TempData in ASP.Net MVC 3.

+1

Đề nghị tốt đẹp để thiết lập ViewBag.Error = TempData ["Lỗi"] trong bộ điều khiển, do đó quan điểm không cần phải quan tâm đến chi tiết này. –

+0

Vâng, tôi đã từng có nó trong chính nó, nhưng sau đó tôi đã có rất nhiều logic trong quan điểm đối phó với biến để xem xét. Tôi sử dụng bộ điều khiển để lấy tất cả các thông tin cần thiết và chuyển nó cho khung nhìn. – Joshua

+0

Cảm ơn rất nhiều Joshua cho câu trả lời, nó hoạt động tốt, và cảm ơn cho các nguồn lực đọc quá. – Oflocet

13

Nếu bạn đang thực hiện chuyển hướng, hãy thử sử dụng TempData thay vì ViewBag. TempData là một từ điển lưu giữ các khóa/giá trị trong phiên của người dùng cho đến khi yêu cầu trang tiếp theo. Trong điều khiển của bạn:

TempData["Error"] = "A message goes here"; 

Theo quan điểm Danh sách của bạn mà bạn đang chuyển hướng đến:

@TempData["Error"] 

Hoặc nếu bạn không sử dụng dao cạo:

<%= TempData["Error"] %> 
+0

Cảm ơn esker cho câu trả lời. – Oflocet

1

Sử dụng ViewBag POST ActionResult:

ActionResult SubmitUser() 
{ 
    ViewBag.Msg =TempData["Msg"]; 

    return view(); 
} 

[HtttpPost] 
ActionResult SubmitUser() 
{ 
    TempData["Msg"] ="Submitted Successfully"]; 

    return view(); 
} 
Các vấn đề liên quan