with parameter net mvc asp asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 controller

asp.net-mvc - parameter - return redirect mvc 5



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

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?


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


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


Usando TempData

Representa un conjunto de datos que persiste solo de una solicitud a la siguiente

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

Manera alternativa Pasar los datos usando cadena de consulta

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

Esto generará una solicitud GET como Student/GetStudent?Name=John & Class=clsz

Asegúrese de que el método al que desea redirigir esté decorado con [HttpGet] ya que RedirectToAction anterior emitirá la solicitud GET con el código de estado http 302 Found (forma común de realizar la redirección de url)


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