2009-12-15 56 views
0

我有一个不太理想的情况,上传的文件存储在内部网络共享中。因此,在数据库中,我将路径存储到文件的保存位置,但文件很可能会被删除而不同步数据库。因此,在Controller操作中,我查找上传信息并执行检查,确保事情是正确的。它可以概括为如下所示:如何为ASP.NET MVC控制器处理不同的ActionResults动作

public ActionResult GetUploadedFile(int uploadId){ 
    var uploadedFile = Repository<Upload>.FirstOrDefault(upload => upload.ID == uploadID); 
    if(uploadedFile == default(Upload)){ 
     return View("InvalidUpload"); 
    } 
    if(File.Exists(uploadFile.Path)){ 
     var fileInfo = new FileInfo(uploadFile.Path); 
     var contentType = HttpContext.GetMimeTypeForFileInfo(fileInfo) // my lookup extension method 
     return File(uploadFile.Path, contentType, uploadFile.Name); 
    } 
    return View("InvalidUpload"); 
} 

问题是,此操作当前可通过通过AJAX加载的视图上的链接访问。因此,当文件存在并且一切正常时,它会在浏览器中显示标准的“你想用这个文件做什么”对话框,并保持内容对用户可见。问题是通过代码的其他路径。返回视图会将用户转到一个全新的URL。然后点击返回会重置它们的位置(它基本上是动态的jQuery Tabs,所以没什么大的,但仍然是一个重大的不便)。

所以我正在寻找其他人可能如何解决这种情况,因为它似乎并不少见。甚至还有一些反馈意见让用户更友好一些。我在文件存储位置没有发言权,所以更改这不是一个选项。

+0

你想用户返回到正确的JQuery的标签? – 2009-12-15 16:40:06

+0

其实我宁愿没有离开当前位置的移动,但将它们带回正确的标签也是有益的。请记住,他们最可能使用的标签是完整的网址,而不是编号。所以jQuery Tabs给它一个独特的散列。 – 2009-12-15 16:50:53

回答

-1

您可以使用不同类型的操作结果。

通常,当我有一个控制器方法输出视图以外的内容时,我使用ContentResult操作。

public ContentResult GetUploadedFile(int uploadId){ 

一些结果类型:

  1. 的ViewResult - 代表HTML和标记。
  2. EmptyResult - 表示无结果。
  3. RedirectResult - 表示重定向到一个新的URL。
  4. JsonResult - 表示可以在AJAX应用程序中使用的JavaScript对象表示法结果。
  5. JavaScriptResult - 表示JavaScript脚本。
  6. ContentResult - 表示文本结果。
  7. FileContentResult - 表示可下载的文件(包含二进制内容)。
  8. FilePathResult - 表示可下载的文件(带有路径)。
  9. FileStreamResult - 表示可下载的文件(带有文件流)。

List taken from here

+0

如果你看看我在问题中有什么,我会返回不同的结果。这不是问题。这是如何在前端处理它以获得更好的用户体验。 – 2009-12-15 17:07:27

相关问题