2016-07-25 2 views
0

я столкнулся следующее сообщение об ошибке при использовании метода RedirectToAction в ASP.NET MVC 5.Неправильный список наклеены с помощью метода RedirectToAction в ASP.NET MVC

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

Однако в моем CurrentProfile метод, который я получил неожиданные данные

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

и отладчик показывает, что existsReports аргумент System.Collections.Generic.List``1[System.String]

Я полагаю, моя проблема, связанная с типа литья?

ответ

2

RedirectToAction метод возвращает ответ 302 вашему браузеру с новым URL-адресом в качестве значения заголовка местоположения. Браузер сделает новый HTTP-запрос на этот новый URL-адрес.

Если вы посмотрите на методе RedirectToAction перегрузках, вы можете увидеть, что третий параметр для routevalues ​​(который для значений строки запроса)

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

Вы не должны передать сложные данные (например, список) к методу RedirectToAction. В основном, когда вы передаете некоторые небольшие объекты, он будет преобразован в значения querystring.

Если вы хотите передать сложные данные, я предлагаю вам передать уникальныйId, из которого список может быть восстановлен в вашем действии GET еще раз. Если это не вариант, рассмотрите возможность использования TempData.

Передача уникальный идентификатор

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

Это установит значение заголовка местоположения как /YourController/CurrentProfile?listId=someUniqueIdHere

Проходя через TempData

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

и читать его в CurrentProfile GET действий метод снова.

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

Посмотрите на How do I include a model with a RedirectToAction?, а

Смежные вопросы