【问题标题】:Sharing model objects between controller actions in MVC3在 MVC3 中的控制器动作之间共享模型对象
【发布时间】: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&lt;FileInfo&gt;。你总是会收到null
  • 嗨,Igor,我已经编辑了代码。我在上传操作中实例化 fileInfo 对象,将其传递给 TempData,然后在结果操作中使用 TempData。这行得通,但我想知道是否有更好的方法。
  • 你为什么要status.ToString() == "OK"?我猜statusenum 所以你最好还是做status == Status.OK
  • 谢谢特雷弗!我正在检查HttpStatusCode 我刚刚意识到我可以这样做:status == HttpStatusCode.OK

标签: asp.net-mvc-3


【解决方案1】:

如果您需要在后续请求中保留更长时间的内容,则必须将其放入 Session 或持久存储(例如数据库)中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 2015-09-30
    • 1970-01-01
    相关资源
    最近更新 更多