したがって、アクション内でファイルをダウンロードできるようにするにはどうすればいいですか?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) { }
});
};
だから私は、非同期のquerryが問題でした。私はあなたの選択肢が本当に好きではありません。私はユーザーにとってより直接的なものを求めています。このファイルの目的は、ユーザーに時間を稼ぐことです。そうすれば、ユーザーは1秒間待ってから再度クリックする必要があります...もっと直接的なものが必要です。私は単純なhtml投稿でそれを試してみましょう。 –
ええ、公正であることは、それがポストのベストオプションであることに同意するでしょう、それはAJAXコールでちょっと乱雑になることがあります:) – mattytommo
[OK]を、簡単な投稿で、ファイルのダウンロードがうまくいきます。しかし、私は今ビューからコントローラにデータを渡すことに問題があります: - (... –