使用.NET MVC3创建然后下载文档

时间:2015-02-08 16:25:17

标签: c# jquery asp.net ajax

我的节目:

  1. 从我的网站收集信息。 (Jquery的)
  2. 将数据发送到服务器。 (阿贾克斯帖子)
  3. 服务器将数据汇编到文档中。 (参见下面的.NET代码)
  4. 自动下载文档。 (文件对话框正常或其他)(参见下面的.NET代码)
  5. Jquery可以轻松执行第1步。但是,如果我在步骤1中使用Jquery,那么我感觉锁定在第2步的ajax帖子中。意思(据我所知)第3步和第4步需要是不同的控制器操作。在这种情况下,在步骤3中组装的文档需要以某种方式转移到步骤4.我打算将文档作为临时文档,因此我不赞成将数据保存到数据库。此外,会话存储空间复杂的数据类型,如我的模型。

    我把看似执行1,2和3的代码放在一起,但是,似乎没有办法轻松地在3到4之间传输数据。文档是临时的,所以我真的不想存储它在数据库中。我更喜欢某种类型的临时服务器端存储。

    所以我的问题: 1.除了ajax帖子之外还有其他选项可以获取大量的文本数据(比我想要的更多)到服务器吗? 2.如果需要两个控制器方法(一个用于组装文档,另一个用于下载),如何暂时“保存”服务器上的数据?我不想在我的复杂对象上使用数据库和Session balks ..

    谢谢, 马特

    DotNetCode汇编文档:

    [HttpPost]
    public ActionResult FinalText(UserModel model)
    {
        byte[] result = buildDocumentFromModel(model);
        return "success";
    }
    

    DotnetCode返回文档:

    [HttpGet]
    public FileResult FinalText(int documentId)
    {
        byte[] result = getDocument(i);
        return File(result, "application/pdf", Server.UrlEncode("test.pdf"));
    }
    

1 个答案:

答案 0 :(得分:1)

问题可以通过常规表单提交来解决。

以下是步骤:

  1. 使用输入和提交按钮定义常规表单
  2. 定义接受 UserModel 的ASP.NET操作方法,构建文档并将其作为文件结果返回(而不是字符串"成功")。
  3. 这里真的不需要Ajax,当表单被发送并且服务器响应文件以便下载浏览器并自动显示保存对话框而不会干扰现有页面的显示和行为(无需重新加载)。

    但是,如果您希望使用ajax调用和两个ASP.NET操作实现所描述的行为(如您所示),则可以将生成的文档作为序列化字符串存储在会话中,并在需要时将其反序列化为字节数组。

    我会推荐第一种方法。