我在这里问了一个先前的问题,其中一部分似乎本身就是一个完整的主题。
我正在尝试跨控制器调用保留文件数据。
场景是:用户上传包含要提交到数据库的条目的文件。如果文件有警告和错误,它们将被重定向到验证页面。如果没有警告或错误,他们的文件将被直接处理。
如果用户收到警告但没有错误(即文本字段太长并且将被截断),他们仍然可以导入文件。由于在上传文件和将其发送到数据库之间有两个单独的屏幕,因此需要保留文件数据。
我已经看到了十几个与此类似的问题,但似乎都没有相关的答案(因此,如果类似的问题没有对这个确切问题的答案,请不要将此问题标记为重复)。
我的第一个想法是使用上传的文件名 + guid 保存文件并将该文件名保存到会话状态,但是我在上一个问题上得到的答案都非常坚定地认为这是一个糟糕的解决方案。
我发现的其他类似问题的解决方案:
- 重新上传文件(一个糟糕的解决方案)
- 使用 viewbag 将文件名发送到视图,以发送回第二个控制器(听起来不对)
- 保存视图模型中的文件位置以发送到视图,由第二个控制器再次检索(再次听起来不正确)
- 将文件位置保存在会话或临时数据中(收到一般不利的评论)
我已经完成了我的研究,但找不到解决此问题的最佳方法。有人可以帮帮我吗?如果您认为另一个问题回答了这个问题,请您将其作为答案发送给我,而不是将此作为重复报告,因为我已经进行了大量搜索。
谢谢你,塞缪尔戴维斯
编辑:我的用户确实有一个可用的会话。我能想到的另一个解决方案是将硬编码字符串附加到包含在其会话 ID 中的 GUID,例如。“MyImporter-xxxx.xxxx.xxxx.xxxx.csv”。这样,“MyImporter”可以是一个私有常量字符串,我的控制器不必保留任何标识符。我不确定这种方法有什么缺点,但是由于我对 MVC 很陌生,所以肯定会有我没有想到的情况。