ActionMethod для возврата содержимого приложения Excel - PullRequest
1 голос
/ 21 августа 2011

Какой правильный метод возвращает тип содержимого application / ms-excel из метода действия в MVC?

Я попытался создать метод действия контроллера и передать контекст контроллера, например:

public void ExportToExcel(MyViewModel model, ControllerContext context)
{
    .... build up html or xml excel output in Writer

    context.HttpContext.Response.Clear();
    context.HttpContext.Response.ContentType = "applicaton/vnd.ms-excel";
    context.HttpContext.Response.AddHeader(.. etc.);
    context.HttpContext.Response.Write(Writer.ToString());
    context.HttpContext.Response.End();
}

При попытке использовать контекст контроллера, как описано выше, я получаю метод или операцию, не реализованнуюисключение при вызове любого метода объекта Response.

Я также пытался вернуть типы результатов действий FileResult, FileContentResult и ContentResult, которые, кажется, просто выбрасывают мое содержимое в браузер.Вот мой код для класса ExcelResult:

public class ExcelResult : ActionResult
{
    private string _content = String.Empty;
    public string Content
    {
        get {

            return _content;
        }

        set {

            _content = value;
        }
    }



    public ExcelResult(string content)
    {
        this.Content = content;
    }



    public override void ExecuteResult(ControllerContext context)
    {
        context.HttpContext.Response.Clear();
        context.HttpContext.Response.ContentType = "application/vnd.ms-excel";
        context.HttpContext.Response.Charset = "iso-8859-1";
        context.HttpContext.Response.BufferOutput = true;
        context.HttpContext.Response.AddHeader("content-disposition", "attachment; filename = exportdata.xls");
        context.HttpContext.Response.Write(this.Content);
        context.HttpContext.Response.End();
    }


}

1 Ответ

0 голосов
/ 22 августа 2011

FYI.Моя проблема была связана с тем, что я пытался изменить тип контента с обратного вызова AJAX.Перед изменением типа содержимого всегда проверяйте, отправляете ли вы форму.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...