2016-05-09 6 views
0

Я теряю данные при переходе от одного действия к другомуПотеря данных при переходе от одного действия к другому

Что случилось? Я делаю это:

public ActionResult Index(CV model) 
    { 
     return View(); 
    } 

    public ActionResult rr() 
    { 
     CV _cv = new CV(); 
     _cv.education = new List<Education>(); 
     _cv.education.Add(new Education() 
     { 
      Faculty = "sa", 
      OnGoing = false, 
      Specialization = "asdasd", 
      UniversityName = "sulxan", 
      EndDate = DateTime.Now.AddDays(1), 
      StartDate = DateTime.Now 

     }); 
     return RedirectToAction("Index", _cv); 
    } 

И когда я отладки для индекса параметра model.education.count = 0 вместо 1. В р-р действия это 1 с заданными значениями.

Моя модель класса:

public class CV 
    { 

     public List<Education> education { get; set; } 
     public Education newEducation { get; set; } 
    } 

public class Education 
    { 
     public string UniversityName { get; set; } 
     public string Faculty { get; set; } 
     public string Specialization { get; set; } 
     public DateTime StartDate { get; set; } 
     public DateTime EndDate { get; set; } 
     public bool OnGoing { get; set; } 
    } 
+0

Вы уверены, проходящее через эту модель ГЭТ является лучший доступный вариант? Почему бы не сохранить его в сеансе? – CodeCaster

+4

Вы не можете передать модель, содержащую сложные объекты или коллекции, используя 'RedirectToAction()' Вам нужно сохранить модель где-нибудь (база данных/сеанс и т. Д.) И получить ее снова в методе, к которому вы перенаправляете. –

ответ

0

Вы можете использовать TempData хранить объект и получить data.use этот код

public ActionResult Index() 
{ 
    CV model = (CV)TempData["cv"]; 
    return View(); 
} 

public ActionResult rr() 
{ 
    CV _cv = new CV(); 
    _cv.education = new List<Education>(); 
    _cv.education.Add(new Education() 
    { 
     Faculty = "sa", 
     OnGoing = false, 
     Specialization = "asdasd", 
     UniversityName = "sulxan", 
     EndDate = DateTime.Now.AddDays(1), 
     StartDate = DateTime.Now 

    }); 
    TempData["cv"] = _cv; 
    return RedirectToAction("Index"); 
} 
+0

Но если пользователь обновил браузер, все это не удастся :) –

+0

ya @Stephen. Поскольку он перенаправляет, он дал это решение. иначе ViewBag или ViewData будут уместны. –

+0

Я предполагаю, что вы не понимаете. 'TempData' длится только один запрос, поэтому, если пользователь обновляет браузер, все данные теряются. –

1

Проводка ответ, потому что я слишком много нуб комментировать.

Что Стивен Мюке сказал в своем комментарии совершенно правильно - и, безусловно, важно сохранить ваши данные. Еще одна вещь, следует отметить, что, на основе кода вы в курсе, вам не нужен RedirectToAction, если все, что вы пытаетесь сделать, это вернуть модель с точки зрения вы хотите:

возвратного View ("Index ", _резюме);

Конечно, не видя, как построена остальная часть вашего приложения, что потенциально может вызвать проблему.

0

Вы можете использовать TempData как этот

public ActionResult Index() 
{ 
    var model = TempData["CV "] as CV; 
    return View(); 
} 

public ActionResult rr() 
{ 
    CV _cv = new CV(); 
    _cv.education = new List<Education>(); 
    _cv.education.Add(new Education() 
    { 
     Faculty = "sa", 
     OnGoing = false, 
     Specialization = "asdasd", 
     UniversityName = "sulxan", 
     EndDate = DateTime.Now.AddDays(1), 
     StartDate = DateTime.Now 

    }); 
    TempData["CV"] = _cv; 
    return RedirectToAction("Index"); 
} 
Смежные вопросы