2015-10-20 4 views
0

Вот метод (сокращенно), который выглядит следующим образом:MVC - Невозможно передать параметр с RedirectToAction

 [HttpPost] 
     public ActionResult SearchForCompanies(FormCollection collection) 
     { 
      CompanySearch search = new CompanySearch(); 

      search.CompanyList = CompanyData.GetList(); 

      return this.RedirectToAction("SearchForCompanies", "Company", new {companySearch = search}); 
     } 

Описанный выше метод перенаправляет к методу ниже в том же контроллере:

[HttpGet] 
    public ActionResult SearchForCompanies(CompanySearch companySearch) 
    { 
     if (companySearch == null) 
      companySearch = new CompanySearch(); 

     ... 
     ... 

     return View(companySearch); 
    } 

При переадресации, HTTPGet-версия SearchForCompanies получает вызов успешно. Однако значение параметра companySearch всегда равно NULL, даже если оно имеет значение при вызове перенаправления. Поэтому я не должен правильно передавать параметр.

+1

Вы не можете пройти сложный объект таким образом. Вы можете использовать 'return RedirectToAction (« SearchForCompanies »,« Компания », поиск);« но если какие-либо свойства «CompanySearch» содержат свойства, которые являются сложными объектами или коллекциями (что, по-видимому, в вашем случае), это не удастся, и всегда существует риск превышения лимита строки запроса и исключения исключений –

+0

Спасибо. Я должен был знать это, потому что раньше я сталкивался с этим. Если вы напишете это как ответ, я приму это. –

ответ

1

Для того, чтобы пройти сложный объект метода действия, вы можете использовать

CompanySearch search = new CompanySearch(); 
return RedirectToAction("SearchForCompanies", "Company", search); 

который будет сериализовать все свойства CompanySearch для запроса параметров строки. Однако это

  1. создать уродливый URL-адрес
  2. сгенерирует исключение превышается предел строки запроса и
  3. неуспех, если какие-либо из свойств модели являются сложными объектами или коллекции, которая, как представляется, в случае с вашей собственностью CompanyList (строка запроса стать чем-то вроде ...&CompanyList=System.Collections.Generic.List<...>&...)