2012-01-10 28 views
7

Tôi đang cố gắng chuyển ngẫu nhiên string từ số Controller của mình tới số View.Sử dụng ViewData để chuyển chuỗi từ Bộ điều khiển sang Chế độ xem trong ASP.NET MVC3

Đây là mã của tôi Controller:

[HttpPost] 
    public ActionResult DisplayForm(UserView user) 
    { 
     //some data processing over here 
     ViewData["choice"] = "Apple"; 

     return RedirectToAction("Next", "Account"); 
    } 

Bây giờ tôi muốn vượt qua giá trị dữ liệu "Apple" để quan điểm của tôi Next.cshtml mà được tạo ra như sau:

//View: Next.cshtml 

    @{ 
    ViewBag.Title = "Thanks for registering"; 
    Layout = "~/Content/orangeflower/_layout.cshtml"; 
    } 
    <p>Your favorite fruit is:</p>@ViewData["choice"] 

Nhưng tôi không thể để xem dữ liệu của tôi trong trình duyệt khi dự án chạy.

Dưới đây là ảnh chụp:

1) Mở debug, bộ điều khiển hiển thị giá trị:

enter image description here

2) Quan điểm trình duyệt không hiển thị các giá trị "Apple"

enter image description here

3) Gỡ lỗi thêm để xem Next.cshtml của mình Xem: enter image description here

Tại sao giá trị không được chuyển đến Chế độ xem chính xác. Cả hai bộ điều khiển của tôi cho NextDisplayForm đều nằm trong cùng một Bộ điều khiển AccountController.cs, giá trị vẫn không được hiển thị.

Ai đó có thể giúp tôi giải quyết vấn đề này không?

Trả lời

11

Bạn không hiển thị chế độ xem, bạn đang chuyển hướng. Nếu bạn muốn vượt qua một số thông tin tyo xem bạn cần phải trả lại quan điểm này sau khi thêm nó vào ViewData:

[HttpPost] 
public ActionResult DisplayForm(UserView user) 
{ 
    //some data processing over here 
    ViewData["choice"] = "Apple"; 

    return View(); 
} 

Nếu bạn muốn vượt qua một thông điệp rằng sẽ sống sót sau khi một chuyển hướng bạn có thể sử dụng TempData thay vì ViewData.

[HttpPost] 
public ActionResult DisplayForm(UserView user) 
{ 
    //some data processing over here 
    TempData["choice"] = "Apple"; 

    return RedirectToAction("Next", "Account"); 
} 

sau đó bên trong Hành động tiếp theo, bạn có thể tìm nạp dữ liệu từ Chế độ xem và lưu trữ dữ liệu trong Chế độ xem để chế độ xem có thể đọc.

+0

ohh vì vậy tôi cần phải viết trả lại Xem ("Tiếp theo", "Tài khoản") theo mã của tôi ngay nếu tôi không chuyển hướng? –

+0

@ParthDoshi, vâng, nếu bạn muốn sử dụng ViewData trực tiếp. Nhưng nếu bạn muốn giữ mô hình Redirect-After-Post bạn có thể sử dụng TempData như trong câu trả lời của tôi. –

+0

cảm ơn nó đã hoạt động !! :) –

1

Bạn đang thực hiện bài đăng - chuyển hướng - nhận. ViewData đang được đặt cho yêu cầu này, trả về chuyển hướng, xóa ViewData, sau đó yêu cầu khác xảy ra không có dữ liệu. Sử dụng TempData thay vào đó và nó sẽ được tự động thêm vào số ViewData theo yêu cầu tiếp theo.

+1

cảm ơn! nó thực sự rất hữu ích. –

+0

Bố cục và giải thích câu hỏi rất hay. –

+0

Cảm ơn! Đôi khi tôi cảm thấy StackOverflow nên cho phép chúng tôi chấp nhận hai câu trả lời, một câu trả lời chính và câu trả lời thứ hai là câu trả lời phụ.Mặc dù, tôi nhận được câu trả lời từ một người dùng khác, tôi cảm thấy câu trả lời của bạn cũng đủ tốt để tôi hiểu sai lầm trong mã của tôi, vì vậy cảm ơn vì đã trả lời nhanh –

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