2015-07-18 3 views
0

У меня есть 2 просмотра с моделью как Account. С точки зрения одного, я использую RedirectToAction пойти, чтобы просмотреть два и отправки модели объекта, как показано ниже:RedirectToAction с моделью и свойствами списка

[HttpPost] 
    public ActionResult Login(Account account) 
    { 
      //Some code here 
      return RedirectToAction("Index", "AccountDetail", account); 
    } 

контроллер AccountDetail выглядит следующим образом:

public ActionResult Index(Account account) 
    { 
     return View("ViewNameHere", account); 
    } 

объектная модель содержит свойство, как это:

public class Account 
{ 
// Some code here 
public List<Details> Details{ 
get; 
set; 
} 

в первом контроллере, прежде чем сделать звонок RedirectToAction есть один пункт в детали. Однако в методе Index второго контроллера нет ничего.

Может кто-то помочь указать на недостаток здесь? Поскольку я начинаю с MVC, я не могу понять это.

ответ

1

Вы не должны передавать сложный объект методу GET. Помимо уродливого URL-адреса, который он создаст, вы можете легко превысить ограничение строки запроса и выбросить исключение.

В любом случае вы не можете передать коллекцию (или сложный объект, содержащий коллекцию) методу GET, используя RedirectToAction(). Внутренне метод использует отражение для генерации строки запроса, вызывая метод .ToString() каждого свойства модели, который в случае вашего свойства коллекции будет чем-то вроде ../AccountDetail/Index?Details=System.Collections.Generic.List<Details>.

Когда метод вызывается Index(), создается новый экземпляр Account инициализируется, и значение его свойства Details предпринята попытка установить в строку System.Collections.Generic.List<Details> которая выйдет из строя, и результат в том, что свойство Details является null.

Варианты включают прохождение идентификатор и получить коллекцию из хранилища или Session или TempData

+0

Perfect. Большое спасибо. – NewUser1206

Смежные вопросы