在MVC3中返回文件的操作

时间:2012-04-19 11:34:09

标签: asp.net asp.net-mvc vb.net asp.net-mvc-3 jquery

所以,我没有得到我仍然应该在行动中下载文件。

所以,这是我的控制器。一切似乎都运行良好,除了我从未收到任何文件下载客户端。

    <HttpPost()>
    Function meetingCP(idCont As Integer, idOpp As Integer, schedule As String) As FileResult
        Dim id As Integer = 0
        Dim iCSFile As StringBuilder = New StringBuilder()
        Dim startDate As Date = schedule
        Dim endDate As Date = startDate.AddMinutes(30)

        iCSFile.AppendLine("BEGIN:VCALENDAR")
        iCSFile.AppendLine("VERSION:2.0")
        iCSFile.AppendLine("METHOD:REQUEST")

      [bla bla bla]

        iCSFile.AppendLine("DESCRIPTION:Reminder")
        iCSFile.AppendLine("END:VALARM")
        iCSFile.AppendLine("END:VEVENT")
        iCSFile.AppendLine("END:VCALENDAR")

        Dim StreamWriter As StreamWriter = New StreamWriter("C:\MvcApplication4\MvcApplication4\Content\test.ics")
        StreamWriter.WriteLine(iCSFile)
        StreamWriter.Close()


        Return File(iCSFile.ToString, "text/plain", "MeetingRequest.ics")
        'Return File(Encoding.UTF8.GetBytes(iCSFile.ToString()), "text/plain", "MeetingRequest.ics")
    End Function

这个动作由ajax调用。可能是问题吗?

function meetCP(idCont, idOpp) {
    var meetCPSelect = ("#meettime" + idCont);
    var dateTime = $(meetCPSelect).val();
    $.ajax({
        url: '@Url.Action("meetingCP")',
        type: 'POST',
        data: { idCont: idCont, idOpp: idOpp, schedule: dateTime },
        success: function (result) { }
    });
};

3 个答案:

答案 0 :(得分:2)

您无法使用AJAX从主HTML响应中下载文件。

执行此操作的方法是使用不可见的IFrame,使ajax调用刷新iframe并将IFrame的src设置为您要发送的文件。

答案 1 :(得分:2)

我说不出来但看起来你正在创建一个文件?如果您有该文件的路径,则可以使用与此类似的内容来下载该文件。这对我有用:

public ActionResult DownloadFile(string path, string fileName) {
    FileContentResult result = null;
    var file = path + fileName;
    if (System.IO.File.Exists(file)) {
        result = new FileContentResult(System.IO.File.ReadAllBytes(file), "application/pdf");
    }
    return result;
}

在你看来,你只需要这样的东西:

@Html.ActionLink("Your Filename", "DownloadFile", "YourController", new { path = @item.FileLocation, fileName = @item.CurrentFileName }, new { target = "blank" })            

答案 2 :(得分:0)

选项1:使用内置的ActionResults,例如FilePathResult,FileStreamResult,FileContentResult(http://weblogs.asp.net/rajbk/archive/2010/05/03/actionresult-types-in-mvc2.aspx

选项2:构建自定义ActionResult以返回您的Excel文件(例如:http://www.dotnetcurry.com/ShowArticle.aspx?ID=484&AspxAutoDetectCookieSupport=1

ASP.NET MVC how to make an action that return a file?