2016-05-09 6 views
0

Ich verliere Daten während der Übertragung von einer Aktion auf einem anderenVerlust von Daten während der Übertragung von einer Aktion auf einem anderen

Was ist los? Ich tue dies:

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); 
    } 

Und wenn ich zum Index Parameter model.education.count Debuggen bin = 0 statt 1. In rr Aktion ist es 1 mit gewünschten Werten.

Meine Modellklasse ist:

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

verwenden können, sind Sie sicher, dass dieses Modell durch GET vorbei ist beste verfügbare Option? Warum nicht in der Sitzung speichern? – CodeCaster

+4

Sie können ein Modell, das komplexe Objekte oder Sammlungen enthält, nicht mit 'RedirectToAction()' übergeben. Sie müssen das Modell irgendwo (Datenbank/Sitzung usw.) persistieren und in der Methode, auf die Sie umleiten, erneut abrufen. –

Antwort

0

Sie können TempData verwenden, um die Einheit zu speichern und abzurufen die data.use diesen Code

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

Aber wenn der Benutzer den Browser aktualisiert, wird alles scheitern :) –

+0

ya @Stephen. Da er umleitet, gab diese Lösung. Ansonsten wären ViewBag oder ViewData sinnvoll. –

+0

Ich gehe davon aus, dass Sie nicht verstehen. 'TempData' dauert nur eine Anfrage. Wenn der Benutzer den Browser aktualisiert, gehen alle Daten verloren. –

1

Posting eine Antwort, weil ich zu viel von einem Noob bin zu kommentieren.

Was Stephen Mücke in seinem Kommentar gesagt hat, ist völlig korrekt - und es ist definitiv wichtig, Ihre Daten zu erhalten. Eine andere Sache zu beachten ist, dass, basierend auf dem Code, den Sie geschrieben, Sie nicht die RedirectToAction brauchen, wenn alles, was Sie versuchen, das Modell mit der Ansicht zu tun ist, kehren Sie wollen:

return View ("Index ", _Lebenslauf);

Natürlich, ohne zu sehen, wie der Rest Ihrer App gebaut wird, könnte das möglicherweise ein Problem verursachen.

0

Sie TempData wie diese

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"); 
} 
Verwandte Themen