2010-01-26 24 views
14

Đối với các thông báo lỗi, lỗi xác nhận vv bạn cóthông điệp thành công như trái ngược với mô hình thông báo lỗi bang

ModelState.AddErrorMessage("Fool!"); 

Nhưng, nơi nào bạn đặt phản hồi thành công như "Bạn đã chuyển thành công rất nhiều tiền để cũ của bạn." + "Số dư của bạn hiện không bằng 0". Tôi vẫn muốn đặt nó ở cấp độ bộ điều khiển và tốt nhất là theo cách khóa-giá trị, giống như cách errormessages nhưng không làm mất hiệu lực mô hình.

Điều này thường được thực hiện như thế nào? Xem dữ liệu?

+0

Bạn có thể biến nó thành màu xanh lục không? – Scozzard

+1

Tôi chưa xem xét tùy chọn này, nhưng bạn đã xem xét việc mở rộng đối tượng ModelState để bao gồm các thông điệp thành công cũng như các thông báo lỗi? – Odd

Trả lời

21

tôi sẽ cư TempData [ "thành công"] (hay bất cứ những key bạn muốn cung cấp cho nó) với thông báo tôi muốn hiển thị trong bộ điều khiển, sau đó chuyển hướng một cách thích hợp (ví dụ: nếu tôi chỉnh sửa người dùng, tôi chuyển hướng trở lại danh sách người dùng). Điều này dựa trên mẫu POST/Redirect/GET - đó là một thực hành tốt.

TempData["success"] = "Your Balance is now zero"; 

Trong trang chính tôi có phần kiểm tra biến đó và hiển thị thông báo trong div được tạo kiểu đẹp. Nội dung nào đó (có thể không chính xác 100%):

<% if(TempData["success"] != null) { %> 
     <div id="SuccessMessage"><%= Html.Encode(TempData["success"]) %><div> 
<% } %> 
+1

nếu bạn không muốn sử dụng Post/Redirect/Get pattern, bạn có thể sử dụng ViewData thay vì TempData để giữ giá trị. Tôi rất khuyên bạn nên sử dụng Post/Redirect/Get mặc dù ... – Rosstified

+0

Điều đó làm cho rất nhiều ý nghĩa. Bạn học những thứ như thế ở đâu? – Martin

+0

Trong MVC mới hơn, bạn có thể làm tương tự với một cái gì đó như ['ViewBag.Success'] (http://rachelappel.com/when-to-use-viewbag-viewdata-or-tempdata-in-asp.net-mvc- 3-applications) – drzaus

7

Tôi cho rằng bạn có thể kiểm tra ModelState và thiết lập một biến trong mô hình của bạn ...

public ActionResult MyAction(MyEntity model) 
{ 
    //Here would be some validation, which returns with ModelState errors 

    //Now set the validity of the modelstate as the IsValid property in your entity 
    model.IsValid = ModelState.IsValid; 

    return View(model); 
} 

Theo quan điểm của bạn ...

<% if(Model.IsValid) { %> 
    <p>You successfully transfered your balance to your ex.</p> 
<% } %> 

Edit: Với câu hỏi của bạn được cập nhật, Tôi nghĩ bạn đang xem xét cách tiếp cận sai lầm. Tôi sẽ đi cùng với các câu trả lời khác và theo một PRG pattern. Điều này chắc chắn có ý nghĩa hơn là cố thêm một lỗi giả.

+0

Hey Dan, đến để giải cứu tôi một lần nữa. Điều này chỉ cho tôi một phản ứng có thể. Tôi sẽ thuật lại câu hỏi. – Martin

+0

sẽ hiển thị thông báo thành công ở lần truy cập đầu tiên của trang? Bởi vì ModelState cũng sẽ hợp lệ. – Muflix

+1

@Muflix Đó là một câu hỏi hay. Đoạn mã trên là một yêu cầu 'POST', vì vậy yêu cầu' GET' sẽ không trúng mã này. Ngoài ra, giá trị mặc định cho boolean là 'false', trừ khi bạn đặt' IsValid' thành 'true' trong yêu cầu đầu tiên, đây không phải là vấn đề. –

0

Bạn nên triển khai một cái gì đó như mẫu POST/Redirect/GET và "chuyển hướng" đến chế độ xem khác ở cuối phương thức hành động của bạn sau khi tất cả các xác thực đã được xác minh và mọi thứ được thực thi tốt. Bạn có thể chuyển toàn bộ cá thể đối tượng đến đích đích hoặc bạn chỉ cần truyền thông điệp văn bản thuần túy hoặc bạn có thể kéo văn bản trong đích Xem chính nó từ web.config hoặc từ tệp Tài nguyên.

Ví dụ: tôi có một chế độ xem trong thư mục được chia sẻ có tên "ChangeSuccess.aspx" mà tôi chuyển hướng cho tất cả các chỉnh sửa thành công của mình & tạo.

Bạn "chuyển hướng" như thế này

return View("ChangeSuccess", objectInstance); 

(lưu ý: không thực sự chuyển hướng, xem ý kiến)

+1

Tôi gần như hoàn toàn chắc chắn rằng 'return View' ** không thực hiện chuyển hướng **, mà là kết quả trong nội dung khác nhau được trả về bởi cùng một phản hồi.Tôi nghĩ rằng bạn có nghĩa là 'return this.Redirect (" new-url ")' hoặc 'return this.RedirectToAction (...)'. – drzaus

+0

Mặc dù đây là một câu hỏi cũ, bạn đã sửa đổi trong nhận xét của mình. Dòng trên không thực hiện chuyển hướng mà thay vào đó hiển thị một chế độ xem khác với mô hình được chỉ định. – mare

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