2012-06-12 32 views
7

Vì vậy, tôi có một số ViewBag.Something và dữ liệu này được tạo ngẫu nhiên. Theo quan điểm của tôi, tôi đặt nó thành một nhãn như vậy @Html.LabelFor(m => m.Something, (string)ViewBag.Something). Điều này hoạt động tốt nhưng khi tôi gửi biểu mẫu có thể có lỗi và nếu có lỗi, tôi cần nhãn này để giữ nguyên, tôi không muốn dữ liệu động/ngẫu nhiên nữa nên tôi sẽ không gọi phương thức bộ điều khiển được tạo ViewBag này. Có cách nào để giữ lại giá trị này mà không có một số biến riêng trong bộ điều khiển của tôi không? Một số cách tốt đẹp mà MVC/Razor hiện nó?Làm cách nào để lưu dữ liệu ViewBag sau một bài đăng biểu mẫu?

Trả lời

1

Khi nhận, hãy thiết lập mô hình, đặt mô hình động và khi return view() đang được thực thi, hãy thực hiện return view(model). Sau đó, trong chế độ xem, hãy thiết lập trường ẩn có thể tiếp tục truyền giá trị cần thiết. Tôi đã chọn để đi tuyến đường này bởi vì tôi không phải lo lắng về bất kỳ mã máy chủ để làm cho công việc này trên một bài và tôi không phải lo lắng về bất kỳ phiên.

+0

Điều này có vấn đề về bảo mật. Nếu ai đó kiểm tra mã họ sẽ có thể nhận hoặc thậm chí sửa đổi dữ liệu ... Còn nếu đó là một đối tượng thì sao? – Nick

12

Lựa chọn 1:

Vượt qua giá trị của "ViewBag.Something" để điều khiển bằng cách sử dụng các giá trị đường:

@Html.ActionLink("ButtonText", "ActionName", new { Something = @ViewBag.Something }) 

Phương án 2: Bạn có thể sử dụng TempData.

public ActionResult Index() 
{ 
var Something = "YOURVALUE"; 
TempData["Something"] = Something; 
....... 
} 


public ActionResult OtherAction() 
{ 
    var Something = TempData["Something "]; 
    ........... 
} 

Đi qua nhà nước giữa các phương pháp hành động

phương pháp hành động có thể phải truyền dữ liệu đến hành động khác, chẳng hạn như nếu một lỗi xảy ra khi một hình thức đang được đăng, hoặc nếu phương pháp này phải chuyển hướng đến thêm phương pháp, như có thể xảy ra khi người dùng được chuyển hướng đến chế độ xem đăng nhập và sau đó quay lại phương thức hành động gốc.

Phương thức hành động có thể lưu trữ dữ liệu trong đối tượng TempDataDictionary của bộ điều khiển trước khi nó gọi phương thức RedirectToAction của bộ điều khiển để 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.

+0

vì vậy tôi sẽ lưu trữ ViewBag.Something trong một TempData khi tôi nhấn nộp và nếu có điều gì sai, nó sẽ có sẵn để sử dụng? Điều đó có thể tạo ra vấn đề bởi vì nhãn của tôi đang được phổ biến từ ViewBag và tôi đoán bây giờ tôi sẽ cần phải có một số loại nếu? – Pittfall

+0

Xem cập nhật của tôi để biết thêm một tùy chọn khác mà bạn có thể dùng thử. –

+0

Cảm ơn sự giúp đỡ, nó trông tốt nhưng tôi đã đi theo một hướng khác nhau vì vậy tôi không thể chấp nhận câu trả lời của bạn – Pittfall

-1

Hiển thị tin nhắn trong viewbag sau khi công bố (Tôi sử dụng phương pháp này)

ActionResult SubmitUser(){ 

    ViewBag.Msg =TempData["Msg"]; 

    return view(); 
} 


[HtttpPost] 
ActionResult SubmitUser(){ 

TempData["Msg"] ="Submitted Successfully"]; 

    return view(); 
} 

Giá trị được gửi để có được phương pháp ..

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