Asp.net MVC 3 передать параметры - PullRequest
1 голос
/ 14 ноября 2011

У меня есть контроллер, который получает список ключей, и я хочу передать их другому действию контроллера:

 public class DocumentController : Controller
    {
        private  List<DocumentKey> _keys = new List<DocumentKey>();

        [HttpPost]
        public ActionResult Send(Document doc, IEnumerable<HttpPostedFileBase> file)
        {
            ...

            _keys = getKeys();

            return RedirectToAction("Status", "Home", _keys);
        }

Я пытаюсь использовать

return RedirectToAction("Status", "Home", _keys); 

и

return RedirectToAction("Status", "Home", new {keys = _keys});

Но в статусных ключах всегда ноль или счетчик = 0.

public class HomeController : Controller
    {

        public ActionResult Status(List<DocumentKey> keys)
        {
            return View(keys);
        }

Я могу передать простые данные, например:

 return RedirectToAction("Status", "Home", new {key =  _keys.First().ToString()});
 public ActionResult Status(string key)

это работает, но естьспособ передать коллекцию?

Ответы [ 2 ]

2 голосов
/ 14 ноября 2011

RedirectToAction выполняет обратную передачу, отправляя клиенту HTTP 302.Это действительно то, что вам нужно?

Потому что, если вы этого не сделаете, проще всего будет вызвать метод Status вашего HomeController напрямую.Вам также необходимо заменить ваш вызов View, чтобы явно указать имя представления, то есть:

    public ActionResult Status(List<DocumentKey> keys)
    {
       return View("Status", keys);
    }

Если вам действительно нужна передача туда и обратно, тогда решением будет использование TempData для хранения ваших данных.как предложено Джесси.

2 голосов
/ 14 ноября 2011

Передача данных этого типа в качестве параметров строки запроса не будет работать, так как вы пытаетесь это сделать. Если вам нужно, чтобы данные сохранялись до вашего следующего запроса, может оказаться целесообразным ввести «ключи» в tempdata.

public class DocumentController : Controller
    {
        private  List<DocumentKey> _keys = new List<DocumentKey>();

        [HttpPost]
        public ActionResult Send(Document doc, IEnumerable<HttpPostedFileBase> file)
        {
            ...
            TempData["_keys"] = getKeys();
            return RedirectToAction("Status", "Home");
        }

public class HomeController : Controller
    {

        public ActionResult Status()
        {
            List<DocumentKey> keys = TempData["_keys"];
            return View(keys);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...