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