所以,我没有得到我仍然应该在行动中下载文件。
所以,这是我的控制器。一切似乎都运行良好,除了我从未收到任何文件下载客户端。
<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) { }
});
};
答案 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)