【发布时间】:2012-12-19 14:42:15
【问题描述】:
我在控制器中有两个动作。一个显示文件上传表单,另一个显示上传结果。 我创建了一个名为 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 的第二个操作。我希望能够在结果操作中使用相同的文件信息对象。
我可以使用 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");
}
}
【问题讨论】:
-
您将
FileInfo的实例存储在TempData中,但尝试将其检索为List<FileInfo>。你总是会收到null。 -
嗨,Igor,我已经编辑了代码。我在上传操作中实例化 fileInfo 对象,将其传递给 TempData,然后在结果操作中使用 TempData。这行得通,但我想知道是否有更好的方法。
-
你为什么要
status.ToString() == "OK"?我猜status是enum所以你最好还是做status == Status.OK -
谢谢特雷弗!我正在检查
HttpStatusCode我刚刚意识到我可以这样做:status == HttpStatusCode.OK
标签: asp.net-mvc-3