Tôi muốn lấy dữ liệu được nhập trong biểu mẫu người dùng MVC và hiển thị dữ liệu ở chế độ xem khác.MVC - Truyền dữ liệu với RedirectToAction()
Lớp có biến tin sau:
IList<string> _pagecontent = new List<string>();
Hành động sau đây chấp nhận một đối tượng FormCollection, xác nhận nó, và chuyển nó vào "Preview" xem như một danh sách:
[Authorize(Roles = "Admins")]
[ValidateInput(false)]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult UpdateContent(FormCollection collection)
{
if (ModelState.IsValid)
{
string PageToInsert = collection["PageToInsert"];
string PageHeader = collection["PageHeader"];
string PageBody = collection["PageBody"];
//validate, excluded...
_pagecontent.Add(PageToInsert);
_pagecontent.Add(PageHeader);
_pagecontent.Add(PageBody);
}
return RedirectToAction("Preview", _pagecontent);
}
Chế độ xem trước có Chỉ thị trang sau để chuyển đối tượng được nhập mạnh mẽ Danh sách:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Template.Master" Inherits="System.Web.Mvc.ViewPage<List<string>>" %>
Tôi hy vọng sẽ có thể sử dụng đối tượng Model để lấy dữ liệu của tôi, nhưng tôi không thể. Tại dòng sau, tôi nhận được một ngoại lệ error index out of bounds
, trong đó nêu các chỉ số phải không âm và nhỏ hơn kích thước của bộ sưu tập:
<% if (Model[0].ToString() == "0") { %>
Và một số thông số lạ đã được thêm vào URL, vì nó giải quyết để http://localhost:1894/Admin/Preview?Capacity=4&Count=3
Vì vậy, tôi có hai câu hỏi:
- Khi tôi gọi RedirectToAction và vượt qua nó Danh sách của tôi, tại sao nó không thể tiếp cận trong đối tượng mẫu của xem?
- Cách thích hợp để thực hiện những gì tôi đang cố gắng làm, cụ thể là chuyển một bộ sưu tập các chuỗi đến một chế độ xem để hiển thị ở đó?
Tôi đã thử ViewData nhưng không thể làm cho nó hoạt động. Cùng với TempData nhưng tôi chỉ cho nó một đoạn ngắn trước khi đi ngủ tối qua. Điều quan trọng nhất là, tôi thực sự muốn tránh những từ điển này và sử dụng đối tượng View Model mạnh mẽ được đánh máy – splatto
Yea, nhưng đối tượng Model View của bạn - điều đó sẽ không dính xung quanh việc gõ mạnh HTTP 302. Bạn có thể dán mô hình vào TempData và bỏ nó ra. (Thành thật mà nói, tôi thấy dễ dàng hơn khi bỏ qua việc gõ khi sử dụng ASP.NET MVC, vì nó đơn giản là không làm tốt.) – MichaelGG