2016-07-25 8 views
0

konfrontiert ich folgende Fehlermeldung während der RedirectToAction Methode in ASP.NET MVC mit 5.Falsche Liste über RedirectToAction Methode in ASP.NET MVC klebte

[HttpPost] 
    public ActionResult UploadOrderReport(HttpPostedFileBase file) 
    { 
     string targetFolder = HttpContext.Server.MapPath("~/Reports"); 
     string targetPath = Path.Combine(targetFolder, file.FileName); 
     file.SaveAs(targetPath); 

     var currentReports = Directory.GetFiles(targetFolder).ToList(); 
     return RedirectToAction("CurrentProfile", new { existReport = new List<string>(currentFiles)}); 
    } 

Doch meiner CurrentProfile Methode, die ich unerwartete Daten bekam

[HttpGet] 
public ActionResult Index(List<string> existReports) 

und Debugger zeigt, dass existsReports Argument System.Collections.Generic.List``1[System.String]

ist ich mein Problem Gießen zu geben nehme zu tun?

Antwort

2

RedirectToAction Methode wird eine 302 Antwort an Ihren Browser mit der neuen URL als Location Header-Wert zurückgeben. Der Browser wird eine neue HTTP-Anfrage an diese neue URL senden.

Wenn man sich die RedirectToAction Methode Überlastungen anschaut, kann man sehen, dass der dritte Parameter für Routevalues ​​ist (was für die Abfragezeichenfolgeflag Werte)

protected internal RedirectToRouteResult RedirectToAction(
    string actionName, 
    string controllerName, 
    object routeValues 
) 

Sie sollten nicht vorbei komplexen Daten werden (wie eine Liste von Artikel) zur RedirectToAction Methode. Wenn Sie einige kleine Objekte übergeben, werden sie in die Querystring-Werte konvertiert.

Wenn Sie eine komplexe Daten übergeben möchten, empfehle ich Ihnen, eine uniqueId übergeben, aus dem die Liste in Ihrer GET-Aktion wieder abgerufen werden kann. Wenn dies keine Option ist, sollten Sie TempData verwenden.

Passing eine eindeutige ID

return RedirectToAction("CurrentProfile",new { listId="someUniqueIdHere"}); 

Dies wird den Standort-Header-Wert als /YourController/CurrentProfile?listId=someUniqueIdHere gesetzt

Passing über TempData

TempData["existReport "] = new List<string>(currentFiles); 
return RedirectToAction("CurrentProfile", "yourControllerName"); 

Und es in Ihrem CurrentProfile GET Aktion lesen Methode erneut.

public ActionResult CurrentProfile() 
{  
    var items=TempData["existReport"] as List<string> 
    return View(model); 
} 

Werfen Sie einen Blick auf How do I include a model with a RedirectToAction? auch