2011-11-09 34 views

Trả lời

25

Hãy thử sử dụng TempData:

public ActionResult Create(FormCollection collection) { 
    ... 
    TempData["notice"] = "Successfully registered"; 
    return RedirectToAction("Index"); 
    ... 
} 

Sau đó, theo quan điểm Index của bạn, hoặc trang chủ, vv, Bạn có thể làm điều này:

<% if (TempData["notice"] != null) { %> 
    <p><%= Html.Encode(TempData["notice"]) %></p> 
<% } %> 

Hoặc, trong một cái nhìn Razor:

@if (TempData["notice"] != null) { 
    <p>@TempData["notice"]</p> 
} 

Trích từ MSDN (trang không còn tồn tại như năm 2014, lưu trữ bản sao here):

Một phương thức hành động có thể lưu trữ dữ liệu trong đối tượng TempDataDictionary của controller trước khi nó gọi phương thức RedirectToAction của controller để gọi hành động tiếp theo. Giá trị thuộc tính TempData được lưu trong trạng thái phiên. Bất kỳ phương thức hành động nào được gọi sau giá trị TempDataDictionary được đặt có thể nhận các giá trị từ đối tượng và sau đó xử lý hoặc hiển thị chúng. Giá trị của TempData vẫn tồn tại cho đến khi nó được đọc hoặc cho đến khi hết phiên. TempData bền vững theo cách này cho phép các tình huống như chuyển hướng, bởi vì các giá trị trong TempData có sẵn ngoài một yêu cầu duy nhất.

4

Cách 'tốt nhất' để thực hiện việc này là đặt thuộc tính trên đối tượng chế độ xem khi cập nhật thành công. Sau đó, bạn có thể truy cập thuộc tính này trong chế độ xem và thông báo cho người dùng tương ứng.

Có nói rằng nó sẽ có thể kích hoạt một cảnh báo từ các mã điều khiển bằng cách làm một cái gì đó như thế này -

public ActionResult ActionName(PostBackData postbackdata) 
{ 
    //your DB code 
    return new JavascriptResult { Script = "alert('Successfully registered');" }; 
} 

Bạn có thể tìm thêm thông tin trong câu hỏi này - How to display "Message box" using MVC3 controller

+1

Làm thế nào để làm điều này ...? Iam sử dụng Entity Model..this là mã của tôi công khai ActionResult Tạo() { thử { return View(); } bắt (Ngoại lệ cũ) { trả lại LogException (ex); }} – user581007

+0

[HttpPost] public ActionResult Tạo (bộ sưu tập FormCollection) { thử {var objmsg = new Models.motds(); tblMessage msg = new tblMessage(); msg.CreatedDate = System.DateTime.Now; msg.ModifiedDate = System.DateTime.Now; // id mặc định CreatedDate UpdateModel (msg); objmsg.AddMessage (msg); trả về RedirectToAction ("Chỉ mục"); } bắt (Ngoại lệ cũ) { } } – user581007

+0

Thử thêm 'return new JavascriptResult {Script =" alert ('Successfully registered'); " }; 'thay cho' return RedirectToAction ("Index"); ' – ipr101

3

Cá nhân tôi muốn đi với AJAX.

Nếu bạn không thể chuyển sang @Ajax... người giúp đỡ, tôi đề nghị bạn thêm một vài thuộc tính trong mô hình của bạn

public bool TriggerOnLoad { get; set; } 
public string TriggerOnLoadMessage { get; set: } 

Thay đổi quan điểm của bạn để một mô hình mạnh mẽ gõ qua

@using MyModel 

Trước khi trả lại Chế độ xem, trong trường hợp tạo thành công, hãy làm một cái gì đó như

MyModel model = new MyModel(); 
model.TriggerOnLoad = true; 
model.TriggerOnLoadMessage = "Object successfully created!"; 
return View ("Add", model); 

sau đó theo quan điểm của bạn, thêm này

@{ 
    if (model.TriggerOnLoad) { 
    <text> 
    <script type="text/javascript"> 
    alert('@Model.TriggerOnLoadMessage'); 
    </script> 
    </text> 
    } 
} 

Dĩ nhiên bên trong thẻ, bạn có thể chọn để làm bất cứ điều gì bạn muốn, sự kiện khai báo một jQuery chức năng sẵn sàng:

$(document).ready(function() { 
    alert('@Model.TriggerOnLoadMessage'); 
}); 

Hãy nhớ để thiết lập lại các thuộc tính mẫu khi phát hiện cảnh báo thành công.

Một điều tốt đẹp về MVC là bạn thực sự có thể xác định một EditorTemplate cho tất cả điều này, và sau đó sử dụng nó theo quan điểm của bạn thông qua:

@Html.EditorFor (m => m.TriggerOnLoadMessage) 

Nhưng trong trường hợp bạn muốn xây dựng lên một điều như vậy, có lẽ bạn nên xác định lớp C# của riêng bạn:

class ClientMessageNotification { 
    public bool TriggerOnLoad { get; set; } 
    public string TriggerOnLoadMessage { get; set: } 
} 

và thêm một tài sản ClientMessageNotification vào mẫu của bạn. Sau đó viết EditorTemplate/DisplayTemplate cho lớp ClientMessageNotification và bạn đã hoàn tất. Đẹp, sạch sẽ và tái sử dụng.

0

Ít Sửa

Hãy thử thêm

return new JavascriptResult() { Script = "alert('Successfully registered');" }; 

ở vị trí của

return RedirectToAction("Index"); 
Các vấn đề liên quan