Проверьте плагин Eclipse для OCaml, если вы предпочитаете работать на платформе Eclipse. Например, как этот: http://ocamldt.free.fr/
Кроме этого, запуск непосредственно из простых редакторов, таких как emacs или vim, достаточно хорош для программирования. Кроме того, он может помочь вам лучше узнать синтаксис языка и процесс компиляции.
Я думаю, что в этом случае ваш ответ ДОЛЖЕН содержать заголовок Content-Disposition. Создайте собственный ActionResult следующим образом:
public class MyCsvResult : ActionResult {
public string Content {
get;
set;
}
public Encoding ContentEncoding {
get;
set;
}
public string Name {
get;
set;
}
public override void ExecuteResult(ControllerContext context) {
if (context == null) {
throw new ArgumentNullException("context");
}
HttpResponseBase response = context.HttpContext.Response;
response.ContentType = "text/csv";
if (ContentEncoding != null) {
response.ContentEncoding = ContentEncoding;
}
var fileName = "file.csv";
if(!String.IsNullOrEmpty(Name)) {
fileName = Name.Contains('.') ? Name : Name + ".csv";
}
response.AddHeader("Content-Disposition",
String.Format("attachment; filename={0}", fileName));
if (Content != null) {
response.Write(Content);
}
}
}
И используйте его в своем Action вместо ContentResult:
return new MyCsvResult {
Content = Emails.Aggregate((a,b) => a + Environment.NewLine + b)
/* Optional
* , ContentEncoding = ""
* , Name = "DoNotEmailList.csv"
*/
};
Вот как я делаю нечто подобное. Я рассматриваю это как загрузку:
var disposition = String.Format(
"attachment;filename=\"{0}.csv\"", this.Model.Name);
Response.AddHeader("content-disposition", disposition);
Это должно появиться в браузере как загрузка файла с указанным именем файла.
Я не могу придумать причину, по которой ваша не работает.