web-dev-qa-db-fra.com

Pouvons-nous passer le modèle en tant que paramètre dans RedirectToAction?

Je veux savoir, il existe n'importe quelle technique pour pouvoir passer Model en tant que paramètre dans RedirectToAction

Par exemple:

public class Student{
    public int Id{get;set;}
    public string Name{get;set;}
}

Manette

public class StudentController : Controller
{
    public ActionResult FillStudent()
    {
        return View();
    }
    [HttpPost]
    public ActionResult FillStudent(Student student1)
    {
        return RedirectToAction("GetStudent","Student",new{student=student1});
    }
    public ActionResult GetStudent(Student student)
    {
        return View();
    }
}

Ma question - Puis-je passer modèle d'élève dans RedirectToAction?

50
Amit

Utilisation de TempData

Représente un ensemble de données qui ne persiste que d'une requête au suivant

[HttpPost]
public ActionResult FillStudent(Student student1)
{
    TempData["student"]= new Student();
    return RedirectToAction("GetStudent","Student");
}

[HttpGet]
public ActionResult GetStudent(Student passedStd)
{
    Student std=(Student)TempData["student"];
    return View();
}

Autre manière Transmettre les données en utilisant la chaîne de requête

return RedirectToAction("GetStudent","Student", new {Name="John", Class="clsz"});

Cela générera une requête GET telle que Student/GetStudent?Name=John & Class=clsz

Assurez-vous que la méthode que vous souhaitez rediriger est décorée avec [HttpGet] en tant que RedirectToAction ci-dessus va émettre une requête GET avec le statut http code 302 trouvé (moyen courant d'effectuer une redirection d'URL)

59
Murali Murugesan

Appelez simplement l'action inutile de redirect to action ou le mot clé new pour le modèle.

 [HttpPost]
    public ActionResult FillStudent(Student student1)
    {
        return GetStudent(student1); //this will also work
    }
    public ActionResult GetStudent(Student student)
    {
        return View(student);
    }
30
Vinay Pratap Singh

Oui, vous pouvez transmettre le modèle que vous avez montré en utilisant

return RedirectToAction("GetStudent", "Student", student1 );

en supposant que student1 est une instance de Student

qui générera l'URL suivante (en supposant que vous utilisiez les routes par défaut et la valeur de student1 sont ID=4 et Name="Amit")

.../Student/GetStudent/4?Name=Amit

En interne, la méthode RedirectToAction() génère une RouteValueDictionary en utilisant la valeur .ToString() de chaque propriété du modèle. Cependant, la liaison ne fonctionnera que si toutes les propriétés du modèle sont des propriétés simples et si des propriétés sont des objets ou des collections complexes, car la méthode n'utilise pas de récursion. Si, par exemple, Student contenait une propriété List<string> Subjects, cette propriété aurait pour résultat une valeur de chaîne de requête de

....&Subjects=System.Collections.Generic.List'1[System.String]

et la liaison échouerait et cette propriété serait null

10
user3559349
  [HttpPost]
    public async Task<ActionResult> Capture(string imageData)
    {                      
        if (imageData.Length > 0)
        {
            var imageBytes = Convert.FromBase64String(imageData);
            using (var stream = new MemoryStream(imageBytes))
            {
                var result = (JsonResult)await IdentifyFace(stream);
                var serializer = new JavaScriptSerializer();
                var faceRecon = serializer.Deserialize<FaceIdentity>(serializer.Serialize(result.Data));

                if (faceRecon.Success) return RedirectToAction("Index", "Auth", new { param = serializer.Serialize(result.Data) });

            }
        }

        return Json(new { success = false, responseText = "Der opstod en fejl - Intet billede, manglede data." }, JsonRequestBehavior.AllowGet);

    }


// GET: Auth
    [HttpGet]
    public ActionResult Index(string param)
    {
        var serializer = new JavaScriptSerializer();
        var faceRecon = serializer.Deserialize<FaceIdentity>(param);


        return View(faceRecon);
    }
0
hansen.palle