在ASP.net MVC4中导出没有页面导航的文件按钮

时间:2013-11-22 16:24:44

标签: c# asp.net excel asp.net-mvc-4

我正在开发一个ASP.net MVC4 Web应用程序,并希望支持从/到excel功能的导入/导出。我已经编写了导出到excel的代码(或操作),但在编写导入/导出按钮时遇到了麻烦。

具体来说,我只想要只调用导出操作而在当前页面上什么都不做的按钮。

代码

  1. 项目详细信息页面(查看):在项目详细信息中,我有这些按钮enter image description here
  2. ExcelController具有ExportToFile方法
  3. 我尝试使用Ajax.ActionLink和Html.ActionLink但在两种情况下页面导航到
    localhost:52725/Excel/ExportToFile?pid=41
  4. 项目详情页面:

     <div class="btn-group" id="footerButtons">
            @Html.ActionLink("Edit Project", "Edit",
                    new { id = Model.ProjectId },
                    new { @class = "btn btn-primary " })
           @using(Html.BeginForm("ExportToFile", "Excel"))
            {
                <button class="btn" title="Export to Excel" 
                                    type="submit">Export (Excel)</button>   
            }
            @Ajax.ActionLink("Export (Excel)", "ExportToFile", "Excel",
                    new { pid = Model.ProjectId },
                    new AjaxOptions { HttpMethod = "Post", 
                                      UpdateTargetId="footerButtons",  },
                    new { @class = "btn" })
            <!-- Back to results button-->
    
        </div>
    

    Excel控制器

    public class ExcelController : ControllerBase
    {
        public void ExportToFile(int pid = 0)
        {
           // Code to create and write to excel file
           // Main point is it returns nothing which I speculate to be wrong.          
        }
    }
    

1 个答案:

答案 0 :(得分:1)

您希望方法签名看起来像

public FileContentResult ExportToFile(int pid = 0) 

以及使用Controller.File方法的输出

类似

return File(fileBytes, "application/vnd.ms-excel", unique generated file name);

从控制器返回并最终将数据发送到浏览器

作为一个简单的测试

return this.File(new System.Text.UTF8Encoding().GetBytes("my plain text content"),
                     "text/plain", 
                     "my_file.txt");

应返回纯文本文件。