asp.net-mvc - with - send parameters in redirecttoaction




¿Podemos pasar el modelo como un parámetro en RedirectToAction? (4)

Encontré algo así, me ayuda a deshacerme de las etiquetas tempdata codificadas

public class AccountController : Controller
{
    [HttpGet]
    public ActionResult Index(IndexPresentationModel model)
    {
        return View(model);
    }

    [HttpPost]
    public ActionResult Save(SaveUpdateModel model)
    {
        // save the information

        var presentationModel = new IndexPresentationModel();

        presentationModel.Message = model.Message;

        return this.RedirectToAction(c => c.Index(presentationModel));
    }
}

Quiero saber, hay alguna técnica para que podamos pasar el Model como un parámetro en RedirectToAction

Por ejemplo:

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

Controlador

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

Mi pregunta: ¿Puedo aprobar el modelo de estudiante en RedirectToAction?


Sí, puedes pasar el modelo que has mostrado usando

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

asumiendo que student1 es una instancia de Student

que generará la siguiente url (suponiendo que el uso de las rutas predeterminadas y el valor de student1 son ID=4 y Name="Amit" )

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

Internamente, el método RedirectToAction() crea un RouteValueDictionary utilizando el valor .ToString() de cada propiedad en el modelo. Sin embargo, el enlace solo funcionará si todas las propiedades en el modelo son propiedades simples y falla si las propiedades son objetos complejos o colecciones porque el método no usa recursividad. Si, por ejemplo, Student contiene una propiedad List<string> Subjects , entonces esa propiedad daría como resultado un valor de cadena de consulta de

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

y el enlace fallaría y esa propiedad sería null


Simplemente llame a la acción sin necesidad de redirect to action o la new palabra clave para el modelo.

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

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




controller