コントローラに2つのアクションがあります。1つはファイルのアップロード用のフォームを表示し、もう1つはアップロードの結果を表示します。FileInfoというPOCOを作成しました。
public class FileInfo
{
public string Name { get; set; }
public int Length { get; set; }
public string FileType { get; set; }
public string ErrorMessage { get; set; }
}
フォームを送信すると、UploadアクションがFileInfoオブジェクトを作成して入力し、resultsと呼ばれる2番目のアクションにリダイレクトします。結果アクションで同じファイル情報オブジェクトを使用できるようにしたい。
TemPData []を使用してこれを回避することはできますが、単一のリクエストのオブジェクトデータしか保持しないため、制限があります。コントローラーのアクション間でアブジェクトを共有するためのより良い方法があるはずだと思います。
//アクションをアップロード
List<FileInfo> fileInfo= new List<FileInfo>();
//populate the fileInfo object using fi.Add()
if ((status.ToString() == "OK"))
{
TempData["Info"] = fileInfo;
return RedirectToAction("Results");
}
else
{
return RedirectToAction("Index");
}
//結果アクション。
public ActionResult Results()
{
List<FileInfo> fi = TempData["Info"] as List<FileInfo>;
if (fi != null)
{
return View(fi);
}
else
{
return View("Index");
}
}