Рекомендуемый способ создать ActionResult с расширением файла

Проверьте плагин Eclipse для OCaml, если вы предпочитаете работать на платформе Eclipse. Например, как этот: http://ocamldt.free.fr/

Кроме этого, запуск непосредственно из простых редакторов, таких как emacs или vim, достаточно хорош для программирования. Кроме того, он может помочь вам лучше узнать синтаксис языка и процесс компиляции.

19
задан Simon_Weaver 13 June 2009 в 03:58
поделиться

2 ответа

Я думаю, что в этом случае ваш ответ ДОЛЖЕН содержать заголовок 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"
     */
};
21
ответ дан 30 November 2019 в 02:22
поделиться

Вот как я делаю нечто подобное. Я рассматриваю это как загрузку:

var disposition = String.Format(
  "attachment;filename=\"{0}.csv\"", this.Model.Name);
Response.AddHeader("content-disposition", disposition);

Это должно появиться в браузере как загрузка файла с указанным именем файла.

Я не могу придумать причину, по которой ваша не работает.

6
ответ дан 30 November 2019 в 02:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: