2012-04-19 45 views
1

因此,我沒有得到我仍然應該在操作中下載文件的內容。在MVC3中返回文件的操作

所以,這裏是我有的控制器。一切似乎工作正常,除了我從來沒有收到任何文件下載客戶端。

<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) { } 
    }); 
}; 

回答

2

您不能在主HTML響應中使用AJAX進行文件下載。

一種方法是使用一個不可見的IFrame,使ajax調用刷新iframe,並將iframe的src設置爲您想發送的文件。

+0

所以當我雖然異步querry是問題。我不太喜歡你的選擇。我希望更直接的用戶。這個文件的目的是讓用戶賺取時間。這樣,用戶將不得不等待1秒,然後不得不重新點擊...我需要更直接的東西。我會用一個簡單的html文章嘗試一下。 – 2012-04-19 12:34:02

+1

是的,公平地說,我同意這是一個帖子的最佳選擇,它可以與AJAX呼叫有點混亂:) – mattytommo 2012-04-19 12:37:32

+0

好吧,用一個簡單的帖子,文件下載確實工作正常。但是,我現在遇到的問題是將數據從視圖傳遞到控制器: - (... – 2012-04-19 12:58:48

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" })    
+0

是的,我正在創建文件。如果我理解你的代碼,這個文件總是可以下載的?如果文件版本出現問題,那麼用戶會下載在服務器上創建的以前的文件?如果我是對的,這不符合我的要求:-( – 2012-04-19 12:29:12