wake-up-neo.com

Können wir in RedirectToAction ein Modell als Parameter übergeben?

Ich möchte wissen, es gibt jede Technik, so dass wir Model als Parameter in RedirectToAction übergeben

Zum Beispiel:

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

Regler

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

Meine Frage - Kann ich ein Studentenmodell in RedirectToAction bestehen?

50
Amit

TempData verwenden

Stellt eine Gruppe von Daten dar, die nur von einer Anforderung an die .__ bestehen bleiben. Nächster

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

Alternativer Weg Übergeben Sie die Daten mithilfe der Abfragezeichenfolge

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

Dadurch wird eine GET-Anforderung wie Student/GetStudent?Name=John & Class=clsz generiert.

Stellen Sie sicher, dass die Methode, zu der Sie umleiten möchten, mit [HttpGet] als .__ dekoriert ist. Die obige RedirectToAction gibt eine GET-Anforderung mit dem http-Status .__ aus. Code 302 gefunden (übliche Methode zur URL-Weiterleitung)

59

Rufen Sie einfach die Aktion auf, ohne dass redirect to action oder das Schlüsselwort new für das Modell benötigt wird.

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

Ja, Sie können das von Ihnen gezeigte Modell mit übergeben

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

vorausgesetzt, student1 ist eine Instanz von Student

die folgende URL wird generiert (vorausgesetzt, Sie verwenden die Standardrouten und der Wert von student1 ist ID=4 und Name="Amit").

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

Intern erstellt die RedirectToAction()-Methode eine RouteValueDictionary, indem der .ToString()-Wert jeder Eigenschaft im Modell verwendet wird. Das Binden funktioniert jedoch nur, wenn alle Eigenschaften im Modell einfache Eigenschaften sind und es fehlschlägt, wenn Eigenschaften komplexe Objekte oder Auflistungen sind, da die Methode keine Rekursion verwendet. Wenn zum Beispiel Student eine Eigenschaft List<string> Subjects enthält, führt diese Eigenschaft zu einem Abfragezeichenfolgenwert von

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

und die Bindung würde fehlschlagen und diese Eigenschaft wäre 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